返回函数/过程中select的值

时间:2015-04-07 09:03:36

标签: sql oracle view plsql

我有一个SQL语句,我在其中减去两个表来搜索差异。由于我经常使用,我想创建一个函数或过程来制作这些并通过屏幕获得输出。有人可以解释一下,制作这些的最佳方法是什么,你能举一些例子吗?

2 个答案:

答案 0 :(得分: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

的更多详细信息

答案 1 :(得分: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?