我正在尝试让这个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
答案 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);