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 に答える