15

我试图让这个 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

4

1 回答 1

43

我不确定,但也许您使用的是不支持RETURNS TABLE语法的旧版本的 pg。您示例中的下一个问题是 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);
于 2010-11-27T06:34:56.650 回答