首页 文章

plpgsql函数返回表(..)

提问于
浏览
13

我试图让这个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行的错误 - 表..

错误:“TABLE”或其附近的语法错误第2行:RETURNS TABLE(designacion varchar(255),timebeingrotten varch ... ^ ***错误***错误:语法错误在“TABLE”或附近SQL状态:42601性格:67

1 回答

  • 42

    我不确定,但也许您使用旧版本的pg而不支持 RETURNS TABLE 语法 . 您的示例中的下一个问题是PL / pgSQL语言的语法错误 - 请参阅手动语法 - 每个函数必须包含一个带有 BEGIN ... END 的块 . 记录可以通过 RETURN QUERY 语句返回 . 看看这个tutorial .

    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);
    

相关问题