0

SELECTステートメントからREFカーソルを返すカーソルを呼び出すことは可能ですか?

編集 可変数の返されるフィールドが必要なので、パイプライン化されたテーブルは私の目的には役立ちません。

IE。

SELECT GetFields('field1, field2', flh_tout_name)
     FROM ENI_FLUSSI_HUB c
    WHERE flh_id_messaggio = '1'

FUNCTION GetFields(fields、vFlhToutName); vQuery:='SELECT' || フィールド|| 'FROM' || vFlhToutName;

  return EXECUTE IMMEDIATE (vQuery);

終わり

4

1 に答える 1

1

私はそうは思わない。選択から呼び出すことができるパイプライン化されたテーブル関数を作成できます。ここで私の答えを参照してください値のループ、動的クエリの作成、および結果セットへの追加

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'))
于 2012-10-15T14:05:08.857 に答える