举个例子
外层循环
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的关闭如果在②位置的话就会打开多次,最后只关闭一次,这样会不会有问题?
可以这样做吗

解决方案 »

  1.   

    超出打开最大游标数?
    打开的都是同一个游标cursor2 ,也会计数吗
      

  2.   

    我试了10000条数据,游标最后关那种方法没有出错
    从效率上讲反而cursor2放在最后关会快一点
      

  3.   

    以下是我猜想的
    对于同一个游标,第一次open后,会开辟一块缓存,把记录集读到缓存,然后fetch完 到下一次循环
    然后再open,这时候会清空刚才的缓存区,把新的记录集再读到缓存
    等等循环结束后,把游标close,即第一次开辟的缓存释放掉
    所以说游标放在最后关也没事情,反而会节省很多close的时间
    不知道我猜想的有没有问题
    望高手解答
      

  4.   

    用的是oracle的哪个版本?
    是不是oracle本身没有限制,游标打开了没有close之前不能再打开,
    感觉这样不太好.
      

  5.   

    ②完全可以不使用。如果为了保险可以这么写:
    if cursor2%open then
       close cursor2;
    end if;程序中其他地方如果不能确定,也可以按以上的形式处理。