首页 > 解决方案 > 如何在 postgres 存储过程中将数据插入到字符串数组中

问题描述

我有一个伪存储过程,如下所示:

CREATE OR REPLACE FUNCTION get_data()
 RETURNS void AS $$
DECLARE
    rec_new   RECORD;
    querystring TEXT[];

    cursor_file CURSOR FOR
        select * from tableA;
BEGIN
    --open the file cursor
    OPEN cursor_file;
        LOOP
        FETCH cursor_file into rec_new;
        EXIT WHEN NOT FOUND;    

            querystring='{insert into tableB(fileid) values %}',rec_new.fileid;

        END LOOP;
    CLOSE cursor_file;
END; $$
LANGUAGE plpgsql;

我想创建多个插入查询,其中动态 fileId 在循环上进行迭代,并将它们放在('querstring')由逗号分隔符分隔的字符串数组中。上面的代码没有给我确切的结果。实现这一目标的正确方法是什么?

预期的输出如下:

{insert into tableB(fileid) values ('fileA'),
 insert into tableB(fileid) values ('fileB'),
 insert into tableB(fileid) values ('fileC')}

然后这个querystring数组也需要执行。

标签: sqlpostgresqlstored-proceduresstored-functions

解决方案


您可能正在寻找“数组追加”运算符||

但这是解决问题的一种过于复杂的方法。你可以用类似的东西更简单、更有效地做到这一点

SELECT array_agg(
          format(
             'insert into tableB(fileid) values (%L)',
             fileid
          )
       ) INTO querystring
FROM tablea;

推荐阅读