(高分在线)用动态sql执行返回游标变量的存储过程问题

h_lj 2007-07-27 10:13:12
例:
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执行返回结果集的存储过程?
...全文
541 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
h_lj 2007-07-28
  • 打赏
  • 举报
回复
那么多星星,出来亮一下啊
h_lj 2007-07-27
  • 打赏
  • 举报
回复
如果不用动态sql,有没有其他的方法可以实现这种需求呢
hongqi162 2007-07-27
  • 打赏
  • 举报
回复
试了一下
execute immediate 'begin pro1(:1,:2); end;' using 100,out p_rslt;
返回ora-03113错误
h_lj 2007-07-27
  • 打赏
  • 举报
回复
doer_ljy(可战) ( 五级(中级))
oracle 的动态执行包太复杂了,我一直没用过,要试的话还要先学习一下基础知识。没时间啊。。。
h_lj 2007-07-27
  • 打赏
  • 举报
回复
hongqi162(失踪的月亮), 那片文章我看了,按里面的方法都试了,不行,运行时不报错,但一直没有结果返回。 而且我程序的逻辑里是不可能写判断的,因为根本不知道将来会有什么参数传进来。

我现在采取一个折中办法,就是在被调用的过程中返回一个sql字符串,然后在外围程序中用
open rslt for sqlstring,这样就能实现我的需要了。就是写起来麻烦一点,而且不直观。
hongqi162 2007-07-27
  • 打赏
  • 举报
回复
看看这个

http://vadimtropashko.wordpress.com/cursors/
hongqi162 2007-07-27
  • 打赏
  • 举报
回复
判断一下执行那个存储过程,避开使用execute immediate语句
doer_ljy 2007-07-27
  • 打赏
  • 举报
回复
以前我也试过。
动态绑定sys_refcursor这种复杂类型的好像就是不行。
后来没有仔细研究。
理论上应该可以的。
可以试一下使用Oracle动态执行的包,绑定这个类型。
只是一个思路。
关注
h_lj 2007-07-27
  • 打赏
  • 举报
回复
因为调用的时候过程名不确定,是动态生成的,所以不能用上面的方法
hongqi162 2007-07-27
  • 打赏
  • 举报
回复
--为什么不这样用?这样是可以的阿
pro1(100,p_rslt);

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧