如何在循环中向表中插入行

时间:2015-07-28 10:57:41

标签: sql postgresql

我在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

但此语法不适用于此处。没有查询从......中选择行。这些行在循环中。

2 个答案:

答案 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子句,而不是将参数连接到查询中 - 更加健壮。