我在plpgsql
中有以下PostgreSQL
功能:
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;
问题是我不知道该怎么做...插入语句normaly具有以下语法:
INSERT INTO new_tab(id, name)
SELECT x.id, x.name
FROM y
但此语法不适用于此处。没有查询从......中选择行。这些行在循环中。
答案 0 :(得分:1)
带有值的基本插入如下所示:
INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);
根据附加注释,您需要使用光标而不是execute sqls
。
答案 1 :(得分:1)
不需要循环,您也可以在动态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
子句,而不是将参数连接到查询中 - 更加健壮。