私は以下を返す関数some_func()を持っていますrefcursor
:
CREATE OR REPLACE FUNCTION some_func() RETURNS refcursor AS (...)
この関数をコンソールから呼び出して、返されたカーソルから結果セットを表示したいと思います。Oracleでは次のように書きます。
SELECT * FROM TABLE(some_func());
PosgreSQLでのその構造に相当するものは何ですか?
私は以下を返す関数some_func()を持っていますrefcursor
:
CREATE OR REPLACE FUNCTION some_func() RETURNS refcursor AS (...)
この関数をコンソールから呼び出して、返されたカーソルから結果セットを表示したいと思います。Oracleでは次のように書きます。
SELECT * FROM TABLE(some_func());
PosgreSQLでのその構造に相当するものは何ですか?
refcursorは、自動生成されるか、ユーザーが選択した名前で参照されます。ドキュメントのこのページには、それぞれの例が示されています。
refcursorから結果をフェッチするには、カーソルの名前が必要です。生成された名前の場合は、のようになります<unnamed portal 1>"
。その後、次のことができます。
FETCH ALL FROM "<unnamed portal 1>";
結果として関数からカーソル名が返されるrefcursor
ので、そこからカーソル名を取得できます。
refcursorを返すように記述されたpostgres関数があるとしましょう。
CREATE OR REPLACE FUNCTION "com.mkindika"."myfunction" ("refcursor", other input parameters) RETURNS "pg_catalog"."refcursor" AS
$body$
DECLARE
---- query
END;
$body$
LANGUAGE 'plpgsql' STABLE CALLED ON NULL INPUT SECURITY INVOKER;
refcursorを印刷する場合は、次のコード行を使用できます。
BEGIN;
SELECT "com.mkindika"."myfunction" ("refcursor",other input parameters);
FETCH ALL IN "refcursor";