2017-06-12 20 views
0

私はビューを作成するクエリを取得する前に、カーソルを返すoracleのSPを持っていますが、必要なデータの複雑さのために、しかし、私は厳密に情報(クライアントの要件)を持つビューが必要ですが、今私はどのようにビューにデータ(カーソル)を置く/変換するのかわかりません、グローバルテンポラリテーブルをチェックしていましたが、 SPにアクセスする前に、それは不可能です。 view_data_spからSelect *を選択してビューにアクセスし、パフォーマンスには影響しないことは明らかです。ビューにOracleストアドプロシージャ

どうすればいいですか?

ありがとう

答えて

0

レコードタイプ、レコードテーブル、パイプ行を使用することを検討してください。これのような何かがトリックをするだろうか?

CREATE OR REPLACE package sysop as 
    type file_list_rec is record(filename varchar2(1024)); 
    type file_list is table of file_list_rec; 

    function ls(v_directory varchar2) return file_list pipelined; 
end; 
/

CREATE OR REPLACE package body sysop as 
    function ls(v_directory varchar2) return file_list pipelined is 
    rec file_list_rec; 
    v_host_list varchar2(32000) := ''; 
    begin 
    v_host_list := host_list(v_directory); 

    for file in (
     select regexp_substr(v_host_list, '[^'||chr(10)||']+', 1, level) 
     from dual 
      connect by 
      regexp_substr(v_host_list, '[^'||chr(10)||']+', 1, level) is not null) 
     loop 
     pipe row (file); 
     end loop; 
    return; 
    end ls; 
end sysop; 
/
+0

Mikolasさん、ありがとう、私はこれを試してみるつもりですが、パフォーマンスには何か意味がありますか?ビューが照会されるたびに、ループやSPの呼び出しなど、すべてのプロセスが実行されるためです。 – Alex

+0

パフォーマンスのボトルネックが発生する可能性はありません。一度クエリがうまく書かれている。オーバーヘッドは柔軟性のための単なる価格です。 –

関連する問題