この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
よくわかりませんが、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);