Получить данные из таблицы с помощью хранимой процедуры 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.
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');
Переданный параметр - это имя возвращаемого refcursor.
Отображается ли результат, зависит от того, какой клиент SQL вы используете.
В psql
вам нужно будет сделать что-то вроде этого:
begin; -- not required if you turned off autocommit
call sptest('data');
fetch all in "data";
commit;
Некоторые клиенты SQL сделают это автоматически для вас.