Получить данные из таблицы с помощью хранимой процедуры PostgreSQL 11.1

У меня есть таблица с двумя столбцами cola и colb.

Я хочу выбрать столбцы из таблицы, используя хранимую процедуру.

Примечание. Я не хочу использовать функцию из-за возвращаемого типа.

Пытаться:

CREATE OR REPLACE PROCEDURE public.sptest()
LANGUAGE sql

AS $BODY$
         select cola from test;
$BODY$;

Процедура вызова:

call sptest()

Выход:

В выводе данных ничего.

Окно сообщения показывает:

CALL

Query returned successfully in 147 msec. 

person MAK    schedule 08.01.2019    source источник
comment
Что не так с использованием функции?   -  person a_horse_with_no_name    schedule 08.01.2019
comment
@a_horse_with_no_name, у меня разные операторы SELECT зависят от входных параметров, и я не хочу использовать функцию из-за необходимости указывать тип возвращаемого значения, который в моем случае будет динамическим.   -  person MAK    schedule 08.01.2019
comment
Вы можете определить функцию как returns setof record   -  person a_horse_with_no_name    schedule 08.01.2019
comment
@a_horse_with_no_name, но вам нужно указать список определений столбцов для setof record.   -  person MAK    schedule 08.01.2019


Ответы (1)


Вам нужно определить refcursor как параметр inout, чтобы иметь возможность сделать это:

CREATE OR REPLACE PROCEDURE public.sptest(result_data inout refcursor)
LANGUAGE plpgsql
AS $BODY$
begin
  open result_data for select cola from test;
end;
$BODY$;

Затем назовите это так:

call sptest('data');

Переданный параметр — это имя возвращаемого рефкурсора.

Отобразится ли результат, зависит от используемого клиента SQL.

В psql вам нужно будет сделать что-то вроде этого:

begin; -- not required if you turned off autocommit
call sptest('data');
fetch all in "data";
commit;

Некоторые клиенты SQL сделают это автоматически.

person a_horse_with_no_name    schedule 08.01.2019