函数/过程中选择的返回值

Posted

技术标签:

【中文标题】函数/过程中选择的返回值【英文标题】:Return values of select in function/procedure 【发布时间】:2015-04-07 09:03:35 【问题描述】:

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

【问题讨论】:

是否有理由不将此查询放入view? 【参考方案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的详细信息

【讨论】:

谢谢。我将为减号 sql 语句使用视图但我想创建一个函数或过程来使用 dbms_output 查看这些输出。冷你建议我怎么做这些?谢谢 @user104906 如果您真的想在 PL/SQL 中执行此操作,那么只需使用 OPEN CURSOR FOR your_query 并返回一个 ref 游标。例如,看到这个***.com/a/27812983/3989608【参考方案2】:

如果您使用的是 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?

【讨论】:

以上是关于函数/过程中选择的返回值的主要内容,如果未能解决你的问题,请参考以下文章

存储过程和函数的区别

new实例化函数的过程

如何获取AsyncTask 异步处理的返回值

使用Function语句定义一个函数过程,其返回值的类型是

JS获取页面返回值的

请问Ajax如何获取回调函数的返回值?