Я создаю динамический запрос для извлечения некоторых данных из таблицы. Я хочу сохранить эти данные в переменной, но она не может хранить более одного значения. И я также могу использовать временную таблицу, но в некоторых случаях мне также не разрешено ее использовать. Теперь я пытался хранить данные в виде массива:
Пример:
скажем, 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';
но я получаю
error: no schema has been selected.
Как я могу это сделать? Кроме того, есть ли другая альтернатива для хранения нескольких данных в функции?





В целом ваша идея работает. Но вам нужно вынести 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
Ошибка: не выбрана схема. похоже, это другая проблема, не связанная с вашим кодом.