Вопрос:
Создается функция. Функция имеет входной параметр. Я могу вернуть столбец, но я хочу вернуть все столбцы таблицы. Также я хочу сделать, если результат равен нулю, функция возвращает только 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;