Использование execute для хранения данных столбца в массиве в postgresql

Я создаю динамический запрос для извлечения некоторых данных из таблицы. Я хочу сохранить эти данные в переменной, но она не может хранить более одного значения. И я также могу использовать временную таблицу, но в некоторых случаях мне также не разрешено использовать ее. Теперь я пытался хранить данные в виде массива:

Пример: скажем, df_id='select col from schema.table_name' — это динамический запрос, созданный во время выполнения.

declare 
var_tmp varchar [];
BEGIN
    execute 'select array_agg(col) 
          into var_tmp  from ('||df_id||') as y'; 

но я получаю

ошибка: схема не выбрана.

Как я могу это сделать? Кроме того, есть ли другая альтернатива для хранения нескольких данных в функции?


person Vishal D    schedule 05.05.2018    source источник


Ответы (1)


В целом ваша идея работает. Но вы должны переместить into var_tmp из строки запроса и сделать его частью EXECUTE.

Пример:

CREATE TABLE a (a varchar(8));
INSERT INTO a VALUES ('a'), ('b'), ('c');

DO
$$
declare 
var_tmp varchar [];
col varchar = 'a';
BEGIN
    execute 'select array_agg('||col||') 
            from a' into var_tmp; 
  raise notice '%', array_to_string(var_tmp, ', ', '<NULL>');
END
$$ language plpgsql

Отпечатки:

NOTICE:  a, b, c
CONTEXT:  PL/pgSQL function inline_code_block line 8 at RAISE

«Ошибка: схема не выбрана». кажется, это другая проблема, не связанная с вашим кодом.

person sticky bit    schedule 05.05.2018