2017-06-12 92 views
0

我有一個SP在oracle中返回一個遊標,之前我有一個查詢來創建一個viewn,但由於我需要的數據的複雜性,更好的選擇得到它是一個SP ,但我嚴格需要信息(客戶端的要求)的觀點,但現在我不知道如何把數據(光標)放在視圖中,我正在檢查全局臨時表,但這意味着我需要調用SP訪問視圖之前,這是不可能的。我必須通過選擇select * from view_data_sp來訪問視圖,顯然性能不受影響。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

謝謝米庫拉斯,我會試試這個,但我確實有一個問題,在演奏中是否有任何含義?因爲每次查詢視圖時都會完成整個過程,包括循環和調用SP? – Alex

+0

我不知道任何可能的性能瓶頸。一旦查詢寫得很好。開銷只是靈活性的代價。 –