【问题标题】:How to insert data into a String array in postgres stored procedure如何在 postgres 存储过程中将数据插入到字符串数组中
【发布时间】:2019-07-03 05:38:45
【问题描述】:

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

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数组也需要被执行。

【问题讨论】:

    标签: sql postgresql stored-procedures stored-functions


    【解决方案1】:

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

    但这是解决问题的一种过于复杂的方法。您可以使用类似的方法更简单、更高效地完成此操作

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

    【讨论】:

    • 我需要将查询存储在一个数组中,在我的例子中是 'querystring' 变量并一一执行。
    • 没问题。我已经修改了我的答案。
    • 好吧,我就这么说吧。我只需要 querystring 数组,就像我们在 Java 世界中所做的那样,通过将值直接分配给变量。可以在这里实现吗?因为我不想在我的函数中使用选择查询,或者这是唯一的方法?
    • 正如我所说,您可以使用|| 运算符按照您在问题中建议的方式进行操作。这不是 Java 世界,所以考虑使用当地的成语。我的查询将直接分配给变量(PL/pgSQL 中的分配只是 SELECT ... INTO 在引擎盖下。
    • 那行得通。另一项要求是在数组中执行这些查询。我应该如何处理?
    猜你喜欢
    • 2018-12-27
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 2017-09-06
    • 1970-01-01
    • 2023-03-30
    • 2021-02-21
    相关资源
    最近更新 更多