Функция plpgsql возвращает таблицу (..) - PullRequest
15 голосов
/ 25 ноября 2010

Я пытаюсь заставить эту функцию 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 ... ^

*** Ошибка ***

ОШИБКА: синтаксическая ошибка в или рядом с "TABLE" Состояние SQL: 42601 символов: 67

1 Ответ

43 голосов
/ 27 ноября 2010

Я не уверен, но, возможно, вы используете более старую версию 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);
...