例:
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执行返回结果集的存储过程?
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执行返回结果集的存储过程?
execute immediate 'begin pro1(:1,:2); end;' using 100,out p_rslt;
返回ora-03113错误
pro1(100,p_rslt);
动态绑定sys_refcursor这种复杂类型的好像就是不行。
后来没有仔细研究。
理论上应该可以的。
可以试一下使用Oracle动态执行的包,绑定这个类型。
只是一个思路。
关注
open rslt for sqlstring,这样就能实现我的需要了。就是写起来麻烦一点,而且不直观。
oracle 的动态执行包太复杂了,我一直没用过,要试的话还要先学习一下基础知识。没时间啊