Использование execute для хранения данных столбца в массиве в postgresql - PullRequest
0 голосов
/ 05 мая 2018

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

Пример: скажем 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'; 

но я получаю

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

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

1 Ответ

0 голосов
/ 05 мая 2018

В целом ваша идея работает. Но вы должны переместить 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

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

...