私はそうは思わない。選択から呼び出すことができるパイプライン化されたテーブル関数を作成できます。ここで私の答えを参照してください値のループ、動的クエリの作成、および結果セットへの追加
http://psoug.org/reference/pipelined.htmlも参照してください。
基本的に、結果の各行を表すタイプを作成する必要があります。次に、行タイプのテーブルであるテーブル タイプを作成します。
CREATE TYPE MyRowType AS OBJECT(ID NUMBER, VALUE VARCHAR2(10));
CREATE TYPE MyTableType AS TABLE OF MyRowType;
次に、関数は MyTableType を返す必要があります。
CREATE FUNCTION TestTableFunctions (lookup_Value VARCHAR2)
RETURNS MytableType
AS
TYPE r_cursor IS REF CURSOR;
query_results r_cursor;
results_out MyRowType := MyRowType(NULL, NULL);
BEGIN
OPEN query_results FOR
SELECT
ID,
Value
FROM
MyTable
WHERE
LookupValue = Lookup_Value;
LOOP
FETCH query_results INTO
results_out.ID,
results_out.Value;
EXIT WHEN query_results%NOTFOUND;
PIPE ROW(results_out);
END LOOP;
CLOSE query_results;
END TestTableFunctions;
次に、次のように呼び出すことができます。
SELECT * FROM TABLE(TestTableFunctions('abcd'))