簡體   English   中英

在Postgres存儲過程中創建插入查詢的字符串數組並執行它們

[英]Creating a string array of insert queries in Postgres stored procedure and executing them

我需要構造一個所有插入查詢的字符串數組,並在游標上迭代動態值。

該過程如下所示:

CREATE OR REPLACE FUNCTION get_data()
 RETURNS void AS $$
DECLARE
    interval_time INTEGER DEFAULT 0;
    rec_old   RECORD;
    rec_new   RECORD;
    rec_start RECORD;
    v_filename VARCHAR(50);
    querystring TEXT[];

    cursor_file CURSOR FOR
        select distinct(filename) from mytable.tableA;
    cursor_data CURSOR FOR
            select * from mytable.tableA where filename = v_filename order by mindatetime, maxdatetime;
BEGIN
    --open the file cursor
    OPEN cursor_file;
        LOOP
        FETCH cursor_file into v_filename;
        EXIT WHEN NOT FOUND;

            -- Open the second cursor
               OPEN cursor_data;
               FETCH cursor_data INTO rec_old;
               rec_start = rec_old;
               LOOP
                -- fetch each record
                  FETCH cursor_data INTO rec_new;
                      interval_time :=   extract(epoch from rec_new.mindatetime) * 1000 - extract(epoch from rec_old.maxdatetime) * 1000;
                      IF interval_time = 1  THEN
                        -- swap the new and old rec


                        querystring='{insert into mytable.tableA values ('rec_new.fileid,rec_new.systemuid,rec_new.filename,rec_new.mindatetime,rec_new.maxdatetime')}';
                        raise notice 'query is %', querystring;
                        rec_old = rec_new;
                      ELSE
                        -- insert new records to other table
                        RAISE NOTICE 'Values to insert: %, % ', rec_start.mindatetime, rec_old.maxdatetime;


                      END IF;
                      -- exit when no more row to fetch
                      EXIT WHEN NOT FOUND;
               END LOOP;

               -- Close the cursor
               CLOSE cursor_data;

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

我需要像這樣的字符串數組:

{insert into mytable.tableA values ('123','dummyfilenameA','2019-04-21 03:06:26.0','2019-04-28 03:06:26.0'),
insert into mytable.tableA values ('456','dummyfilenameB','2019-05-21 03:06:26.0','2019-05-28 03:06:26.0')}

等等。 該數組應使用記錄數據來構造查詢。 最后,我要執行此查詢字符串。 有沒有辦法做到這一點? 我無法在游標上進行迭代時更新表,因為它會影響已經存在的數據。

如果您使用函數array_append(anyarray,anyelement)將元素添加到數組querystring?

querystring:=array_append(querystring,'insert...');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM