将存储过程转换为表,以便能够在select语句中使用

时间:2014-11-03 23:04:31

标签: plsql oracle11g ref-cursor

我必须使用返回REF CURSOR的现有存储过程。我需要将resultset插入临时表中。

程序规则是:

TYPE cur IS REF CURSOR;
PROCEDURE get(p_one NUMBER ,p_two OUT cur);

如何将此过程的resultset插入表中。

1 个答案:

答案 0 :(得分:0)

我刚刚重新阅读了你问题的标题。你真的需要能够从程序中选择吗?

如果是这样,可以通过使用流水线功能来实现。

这个过程是:

  1. 创建一个对象类型以表示您需要的记录类型。
  2. 创建对象的嵌套表类型。
  3. 创建一个返回嵌套表的流水线函数。
  4. 然后您可以从此功能中进行选择。
  5. 这个例子可以帮助你:

        create or replace type to_test as object (
            val1  varchar2(32),
            val2  varchar2(32)
        );
    
        create or replace type tt_test as table of to_test;
    
        create or replace function demo_pipe return tt_test pipelined       
        is
           v_test to_test;
        begin
           for rec in (select * from user_tables) loop
    
               v_test := to_test(rec.table_name, rec.tablespace_name);
    
               pipe row (v_test);
    
           end loop;   
    
        end;
        /
        select * from table(demo_pipe);