Как вставить данные в массив String в хранимой процедуре postgres - PullRequest
0 голосов
/ 03 июля 2019

У меня есть псевдо-хранимая процедура, как указано ниже:

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 голосов
/ 03 июля 2019

Возможно, вы ищете & ldquo; массив append & rdquo; оператор ||.

Но это слишком сложный способ решения проблемы. Вы можете сделать это проще и эффективнее с чем-то вроде

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