2010-11-25 12 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); 
関連する問題