我试图通过从函数中传递值来从视图中删除一行,但是在rollno
列不存在时出错。
例如:
表
create table tbl1
( rollnumber int,
name varchar);
插入一些行
insert into tbl1 values(1,'abc');
insert into tbl1 values(2,'def');
insert into tbl1 values(3,'ghi');
查看
create view view1 as select * from tbl1;
从我的函数中删除view1中的特定行。
create or replace function function1(rollno int)
returns void as
$body$
declare
temp varchar;
begin
temp:='delete from view1 where rollnumber=rollno';
execute temp;
end;
$body$
language plpgsql;
答案 0 :(得分:0)
此:
temp:='delete from view1 where rollnumber=rollno';
不可能奏效。你不是在替换一个变量,而是按字面意思运行该查询。
我想你可能意味着:
temp:='delete from view1 where rollnumber = ' || quote_literal(rollno);
execute temp;
最好写成参数化查询:
EXECUTE 'delete from view1 where rollnumber = $1' USING rollno;
但在这种情况下,根本不需要使它成为动态SQL,所以你可以写:
create or replace function function1(rollno int)
returns void as $$
delete from view1 where rollnumber=$1;
$$
language SQL;