首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在循环中向表中插入行

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

Stack Overflow用户
提问于 2015-07-28 18:57:41
回答 2查看 130关注 0票数 1

我在PostgreSQL中有以下plpgsql函数

代码语言:javascript
复制
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语句,这样循环就可以像现在一样工作,而且所有行都将保存在一个表中。

代码语言:javascript
复制
for row in execute sqls LOOP
INSERT INTO TABLE new_tab(id, name)
return next row;

问题是我不知道该怎么做。insert语句normaly的语法为:

代码语言:javascript
复制
INSERT INTO new_tab(id, name)
SELECT x.id, x.name
FROM y

但是这种语法不适合这里。没有要从中选择行的查询...行在循环中。

EN

回答 2

Stack Overflow用户

发布于 2015-07-28 19:17:56

基本insert with values如下:

代码语言:javascript
复制
INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);

根据其他注释,您需要使用cursor而不是execute sqls。

票数 1
EN

Stack Overflow用户

发布于 2015-07-28 20:49:02

不需要循环,您也可以在dynamic SQL中使用insert .. select ... returning:

代码语言:javascript
复制
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子句,而不是将参数连接到查询中-更健壮。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31674317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档