游标打开多次 但关闭一次的问题

wywanyong 2009-02-06 02:22:27
举个例子
外层循环
declare cursor1,cursor2
begin
open cursor1
loop
fetch cursor1 into ora-xxxx
begin
open cursor2 using :ora-xxxx
loop
fetch cursor2
end loop
①close cursor2
end
end loop

②close cursor2
close cursor1
end

对于游标cursor2的关闭如果在②位置的话就会打开多次,最后只关闭一次,这样会不会有问题?
可以这样做吗
...全文
405 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hui1314 2009-02-09
  • 打赏
  • 举报
回复
②完全可以不使用。如果为了保险可以这么写:
if cursor2%open then
close cursor2;
end if;

程序中其他地方如果不能确定,也可以按以上的形式处理。
willflyz 2009-02-06
  • 打赏
  • 举报
回复
用的是oracle的哪个版本?
是不是oracle本身没有限制,游标打开了没有close之前不能再打开,
感觉这样不太好.
wywanyong 2009-02-06
  • 打赏
  • 举报
回复
以下是我猜想的
对于同一个游标,第一次open后,会开辟一块缓存,把记录集读到缓存,然后fetch完 到下一次循环
然后再open,这时候会清空刚才的缓存区,把新的记录集再读到缓存
等等循环结束后,把游标close,即第一次开辟的缓存释放掉
所以说游标放在最后关也没事情,反而会节省很多close的时间


不知道我猜想的有没有问题
望高手解答
wywanyong 2009-02-06
  • 打赏
  • 举报
回复
我也知道是开一次关一次,我也是这样做的
但是看到有的同事都是放到最后关的,我让他们改,他们说没有错误。我就想问一下会不会有问题
有什么问题,很重要的
wywanyong 2009-02-06
  • 打赏
  • 举报
回复
我试了10000条数据,游标最后关那种方法没有出错
从效率上讲反而cursor2放在最后关会快一点
cosio 2009-02-06
  • 打赏
  • 举报
回复
把2)那语句去掉
标准就是开一次关一次,是对应的!
wywanyong 2009-02-06
  • 打赏
  • 举报
回复
放在最后关会不会有问题呢
白发程序猿 2009-02-06
  • 打赏
  • 举报
回复
打开一次当然要关闭一次啊
wywanyong 2009-02-06
  • 打赏
  • 举报
回复
超出打开最大游标数?
打开的都是同一个游标cursor2 ,也会计数吗
yf520gn 2009-02-06
  • 打赏
  • 举报
回复
会有问题,会出现报错:超出打开最大游标数;

17,090

社区成员

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

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