Использование 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'; 

но я получаю

error: no schema has been selected.

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
394
1

Ответы 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

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

Другие вопросы по теме