2015-04-07 69 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 –