2010-11-25 117 views
12

我試圖讓這個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的錯誤 - 表..

ERROR: syntax error at or near "TABLE" LINE 2: RETURNS TABLE(designacion varchar(255),timebeingrotten varch... ^

*** Error ***

ERROR: syntax error at or near "TABLE" SQL state: 42601 Character: 67

回答

39

我不確定,但也許你在沒有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);