Подтвердить что ты не робот

Функция 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

4b9b3361

Ответ 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);