如何在Postgres存储过程中将数据插入String数组

时间:2019-07-03 05:38:45

标签: sql postgresql stored-procedures stored-functions

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

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数组。

1 个答案:

答案 0 :(得分:0)

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

但这是解决问题的过于复杂的方法。您可以使用以下类似的方法更简单,更有效地完成此任务:

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