web-dev-qa-db-ja.com

SQLクエリを含む関数には、結果データの宛先がありません

SELECTされた結果セットを返す関数を作成しようとしています。このselect * from tst_dates_func()のようなpostgres関数を呼び出すと、次のようなエラーが表示されます。

_ERROR:  query has no destination for result data
HINT:  If you want to discard the results of a SELECT, use PERFORM instead.
CONTEXT:  PL/pgSQL function "tst_dates_func" line 3 at SQL statement

********** Error **********

ERROR: query has no destination for result data
SQL state: 42601
Hint: If you want to discard the results of a SELECT, use PERFORM instead.
Context: PL/pgSQL function "tst_dates_func" line 3 at SQL statement
_

私が作成した関数は次のとおりです。

_CREATE OR REPLACE FUNCTION tst_dates_func() 
    RETURNS TABLE( date_value date, date_id int, date_desc varchar) as
$BODY$   
BEGIN
    select a.date_value, a.date_id, a.date_desc from dates_tbl a;
END;
$BODY$
      LANGUAGE plpgsql;
_

上記のエラーが発生する理由がわかりません。 select * from tst_dates_func();を実行してデータを取得したいです。または、必要に応じて結果セットをさらに結合します。ここで問題は何ですか?

26
Horse Voice

プレーンSQLとして実行する

CREATE OR REPLACE FUNCTION tst_dates_func() 
    RETURNS TABLE( date_value date, date_id int, date_desc varchar) as
$BODY$   
    select a.date_value, a.date_id, a.date_desc from dates_tbl a;

$BODY$
      LANGUAGE sql;

本当にplpgsqlが必要な場合は、return query

CREATE OR REPLACE FUNCTION tst_dates_func() 
    RETURNS TABLE( date_value date, date_id int, date_desc varchar) as
$BODY$   
BEGIN
    perform SELECT dblink_connect('remote_db');
    return query
    select a.date_value, a.date_id, a.date_desc from dates_tbl a;

END;
$BODY$
      LANGUAGE plpgsql;
37
Clodoaldo Neto