我在PostgreSQL中有以下plpgsql函数
CREATE OR REPLACE FUNCTION func1()
RETURNS SETOF type_a AS
$BODY$
declare
param text;
sqls varchar;
row type_a;
begin
code.....
sqls='select * from func3(' || param || ') ';
for row in execute sqls LOOP
return next row;
END LOOP;
end if;
return;
end
$BODY$
LANGUAGE plpgsql VOLATILE我想在循环中添加一个insert语句,这样循环就可以像现在一样工作,而且所有行都将保存在一个表中。
for row in execute sqls LOOP
INSERT INTO TABLE new_tab(id, name)
return next row;问题是我不知道该怎么做。insert语句normaly的语法为:
INSERT INTO new_tab(id, name)
SELECT x.id, x.name
FROM y但是这种语法不适合这里。没有要从中选择行的查询...行在循环中。
发布于 2015-07-28 19:17:56
基本insert with values如下:
INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);根据其他注释,您需要使用cursor而不是execute sqls。
发布于 2015-07-28 20:49:02
不需要循环,您也可以在dynamic SQL中使用insert .. select ... returning:
create or replace function func1()
returns table (id integer, name text)
as
$$
declare
param text;
begin
param := ... ;
return query execute
'insert into new_tab (id, name)
select id, name
from func3($1)
returning *'
using param;
end;
$$
language plpgsql;注意,我使用了参数占位符和USING子句,而不是将参数连接到查询中-更健壮。
https://stackoverflow.com/questions/31674317
复制相似问题