例:
procedure pro1(p_in number, p_rslt out sys_refcursor) is
begin
open p_rslt for select * from tb1 where col1=p_in;
end;--下面是调用过程
procedure pro2( p_rslt out sys_refcursor) is
begin
  --这种方法可以
  pro1(100,p_rslt);
  --下面就不行
  execute immediate 'begin pro1(:1,:2); end;' using 100,out p_rslt;
end;请问要如何才能通过execute immediate执行返回结果集的存储过程?

解决方案 »

  1.   

    试了一下
    execute immediate 'begin pro1(:1,:2); end;' using 100,out p_rslt;
    返回ora-03113错误
      

  2.   

    如果不用动态sql,有没有其他的方法可以实现这种需求呢
      

  3.   

    --为什么不这样用?这样是可以的阿
    pro1(100,p_rslt);
      

  4.   

    以前我也试过。
    动态绑定sys_refcursor这种复杂类型的好像就是不行。
    后来没有仔细研究。
    理论上应该可以的。
    可以试一下使用Oracle动态执行的包,绑定这个类型。
    只是一个思路。
    关注
      

  5.   

    判断一下执行那个存储过程,避开使用execute immediate语句
      

  6.   

    看看这个http://vadimtropashko.wordpress.com/cursors/
      

  7.   

    hongqi162(失踪的月亮), 那片文章我看了,按里面的方法都试了,不行,运行时不报错,但一直没有结果返回。 而且我程序的逻辑里是不可能写判断的,因为根本不知道将来会有什么参数传进来。我现在采取一个折中办法,就是在被调用的过程中返回一个sql字符串,然后在外围程序中用
    open rslt for sqlstring,这样就能实现我的需要了。就是写起来麻烦一点,而且不直观。
      

  8.   

    doer_ljy(可战) ( 五级(中级))
    oracle 的动态执行包太复杂了,我一直没用过,要试的话还要先学习一下基础知识。没时间啊