2014-11-03 60 views
0

我必须使用现有的存储过程,它返回REF CURSOR。我需要将该resultset插入临时表中。程序将存储的proc转换为表以便能够在select语句中使用

规格是:

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

我如何可以插入这个程序的resultset到表。

+1

你知道结果设置这个光标将返回的结构?或者你是否试图处理一个通用的弱类型引用游标'OUT'参数(换句话说,结果的结构可能会改变)?你已经创建了临时表吗? – 2014-11-03 23:12:06

+0

@JustinCave是的,我已经创建了临时表。但是请让我知道是否可以处理通用的弱类型光标。谢谢。 – user1663715 2014-11-03 23:35:23

+1

如何将通用的弱类型引用光标的数据放入强类型的现有临时表中。这通常是没有意义的,所以我强烈建议重新考虑这种方法。如果您知道正在返回的游标的结构并且与您创建的临时表的结构相匹配,那么从技术上来说它并不难,尽管它在架构上仍然有点关注。 – 2014-11-03 23:38:00

回答

0

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

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

这个过程是:

  1. 创建一个对象类型来表示您所需要的记录类型。
  2. 创建对象的嵌套表类型。
  3. 创建一个返回嵌套表的流水线函数。
  4. 然后您可以选择此功能。

这个例子应该让你对你的方式:

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); 
相关问题