举个例子
外层循环
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的关闭如果在②位置的话就会打开多次,最后只关闭一次,这样会不会有问题?
可以这样做吗
外层循环
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的关闭如果在②位置的话就会打开多次,最后只关闭一次,这样会不会有问题?
可以这样做吗
打开的都是同一个游标cursor2 ,也会计数吗
从效率上讲反而cursor2放在最后关会快一点
对于同一个游标,第一次open后,会开辟一块缓存,把记录集读到缓存,然后fetch完 到下一次循环
然后再open,这时候会清空刚才的缓存区,把新的记录集再读到缓存
等等循环结束后,把游标close,即第一次开辟的缓存释放掉
所以说游标放在最后关也没事情,反而会节省很多close的时间
不知道我猜想的有没有问题
望高手解答
是不是oracle本身没有限制,游标打开了没有close之前不能再打开,
感觉这样不太好.
if cursor2%open then
close cursor2;
end if;程序中其他地方如果不能确定,也可以按以上的形式处理。