plpgsql函数返回表(..)

Dav*_*ias 15 postgresql 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');
Run Code Online (Sandbox Code Playgroud)

它一直给我第2行的错误 - 表..

错误:"TABLE"或其附近的语法错误第2行:RETURNS TABLE(designacion varchar(255),timebeingrotten varch ...... ^

*** 错误 ***

错误:"TABLE"或其附近的语法错误SQL状态:42601字符:67

Pav*_*ule 43

我不确定,但也许您使用旧版本的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;
Run Code Online (Sandbox Code Playgroud)

呼叫:

SELECT * FROM foo(10);
Run Code Online (Sandbox Code Playgroud)