![](/img/trans.png)
[英]How to insert data into a String array in postgres stored procedure
[英]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.