Функция plpgsql возвращает таблицу (..)
Я пытаюсь заставить эту функцию plpgsql работать:
CREATE OR REPLACE FUNCTION outofdate(actualdate varchar)
RETURNS TABLE(designacion varchar(255),timebeingrotten varchar(255))
AS $BODY$
SELECT designacao, actualdate - prazo
FROM alimento
WHERE prazo < actualdate;
$BODY$
LANGUAGE 'plpgsql' volatile;
SELECT *
From outofdate('12/12/2012');
Он продолжает давать мне ошибку в строке 2 - таблице.
ОШИБКА: ошибка синтаксиса в точке или рядом "ТАБЛИЦА" ЛИНИЯ 2: ВОЗВРАЩЕНИЯ ТАБЛИЦА (designacion varchar (255), timebeingrotten varch... ^
*** Ошибка ***
ОШИБКА: ошибка синтаксиса на уровне или около "ТАБЛИЦА" Состояние SQL: 42601 Персонаж: 67
Ответы
Ответ 1
Я не уверен, но, возможно, вы используете более старую версию pg без поддержки синтаксиса RETURNS TABLE
. Следующая проблема в вашем примере - неправильный синтаксис языка PL/pgSQL - посмотрите на руководство для синтаксиса - каждая функция должна содержать блок с BEGIN ... END
. Записи могут быть возвращены с помощью инструкции RETURN QUERY
. Посмотрите на этот учебник.
CREATE OR REPLACE FUNCTION foo(a int)
RETURNS TABLE(b int, c int) AS $$
BEGIN
RETURN QUERY SELECT i, i+1 FROM generate_series(1, a) g(i);
END;
$$ LANGUAGE plpgsql;
Вызов:
SELECT * FROM foo(10);