2015-04-07 64 views
0

我有一個SQL語句,在這個語句中,我使用兩個表來減去搜索差異。由於我經常使用,我想創建一個函數或過程來使這些和屏幕輸出。有人可以解釋我如何做出這些最好的方式,你能舉個例子嗎?函數/過程中select的返回值

+0

是否有沒有把這個查詢轉換爲[圖](http://docs.oracle.com/理由CD/B28359_01/server.111/b28286/statements_8004.htm#SQLRF01504)? –

回答

0

也許這就是你要找的文件,如果您使用的是Oracle 11g第2版:

create or replace procedure prnt_my_view(my_view in varchar2, separator in varchar2 default ',') is 
    type myrefcur is ref cursor; 
    type rowtext is table of varchar2(256); 
    rowdef varchar2(256); 
    rows_cv myrefcur; 
    text rowtext; 
begin 
    select listagg(column_name,'||'''||separator||'''||') within group (order by column_id) into rowdef from user_tab_columns where lower(table_name) = lower(my_view); 
    open rows_cv for 'select '||rowdef||' from '||my_view; 
    fetch rows_cv bulk collect into text; 
    for i in text.first..text.last loop 
     dbms_output.put_line(text(i)); 
    end loop; 
    close rows_cv; 
exception when others then 
    dbms_output.put_line('something is wrong:'||sqlerrm); 
end; 

編輯: 如果你不能使用LISTAGG,檢查例如這裏其他的解決方案:alternative to listagg in Oracle?

1

如果頻繁使用MINUS查詢,那麼最好是建立在查詢視圖。要獲取結果集,只需從視圖中選擇。

例如,

CREATE OR REPLACE VIEW my_view AS 
    SELECT column_list FROM table1 
    MINUS 
    SELECT column_list FROM table2 

而獲取的結果,

SELECT * FROM my_view; 

閱讀更多細節CREATE VIEW

+0

謝謝。我將使用視圖爲minus sql語句但是我想創建一個函數或過程來使用dbms_output查看這些輸出。冷,你建議我怎麼做這些?謝謝 – user650034

+0

@ user104906如果你真的想在PL/SQL中使用它,那麼只需使用'OPEN CURSOR FOR your_query'並返回一個引用遊標。例如,請參閱http://stackoverflow.com/a/27812983/3989608 –