Postgresql хранимая процедура возвращает таблицу всех столбцов

Вопрос:Создается функция. Функция имеет входной параметр. Я могу вернуть столбец, но я хочу вернуть все столбцы таблицы. Также я хочу сделать, если результат равен нулю, функция возвращает только 0. Как я могу это сделать? Здесь результат ошибки. ОШИБКА: запрос не имеет адресата для данных результата СОВЕТ. Если вы хотите отменить результаты SELECT, вместо этого используйте

Вопрос:

Создается функция. Функция имеет входной параметр. Я могу вернуть столбец, но я хочу вернуть все столбцы таблицы. Также я хочу сделать, если результат равен нулю, функция возвращает только 0. Как я могу это сделать?
Здесь результат ошибки.

ОШИБКА: запрос не имеет адресата для данных результата     СОВЕТ. Если вы хотите отменить результаты SELECT, вместо этого используйте PERFORM.     CONTEXT: функция PL/pgSQL dwgcould.returnallcolumns(переменная символов) строка 3 в операторе SQL     ********** Ошибка **********     ОШИБКА: запрос не имеет адресата для данных результата     Состояние SQL: 42601     Подсказка. Если вы хотите отменить результаты SELECT, вместо этого используйте PERFORM.     Контекст: функция PL/pgSQL dwgcould.returnallcolumns(переменная символов) строка 3 в операторе SQL

CREATE OR REPLACE FUNCTION dwgcould.returnallcolumns(IN sessionId character varying) RETURNS SETOF public.mytable AS $BODY$ BEGIN SELECT * FROM public.mytable WHERE session_id=returnallcolumns.sessionId ORDER BY pro_id DESC LIMIT 1; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; Лучший ответ:

Если вы хотите вернуть результат, вам нужно использовать return query в PL/pgSQL , как описано в руководстве

CREATE OR REPLACE FUNCTION dwgcould.returnallcolumns(IN sessionId character varying) RETURNS SETOF public.mytable AS $BODY$ BEGIN return query —<< this was missing SELECT * FROM public.mytable WHERE session_id = returnallcolumns.sessionId ORDER BY pro_id DESC LIMIT 1; END; $BODY$ LANGUAGE plpgsql VOLATILE;

Но для этого вам не нужен PL/pgSQL, простая функция SQL будет более эффективной:

CREATE OR REPLACE FUNCTION dwgcould.returnallcolumns(IN sessionId character varying) RETURNS SETOF public.mytable AS $BODY$ SELECT * FROM public.mytable WHERE session_id = returnallcolumns.sessionId ORDER BY pro_id DESC LIMIT 1; $BODY$ LANGUAGE sql;

Оцените статью
Добавить комментарий