plpgsql函数返回表(..)

时间:2010-11-25 18:18:55

标签: 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');

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

  

错误:语法错误在或附近   “表”第2行:退货   TABLE(designacion   varchar(255),timebeingrotten varch ...                   ^

     

*** 错误 ** *

     

错误:“TABLE”处或附近的语法错误   SQL状态:42601字符:67

1 个答案:

答案 0 :(得分:43)

我不确定,但是您可能在不支持RETURNS TABLE语法的情况下使用旧版本的pg。您的示例中的下一个问题是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);