+ -
当前位置:首页 → 问答吧 → oracle 存储过程 游标关闭疑问

oracle 存储过程 游标关闭疑问

时间:2011-11-09

来源:互联网

现在是这样写的:
SQL code

for rec_a_cur in a_cur loop

end loop;
close a_cur;


但是走到close a_cur的时候会抛出异常。
我把这close a_cur去掉就没有问题了。
难道不需要手动关闭游标?
我想问的是在oracle 存储过程中,什么情况下需要手动关闭游标?或者就不需要手动来关闭?
或者??? 求详细

作者: chenhao1208   发布时间: 2011-11-09

不用单独close a_cur
因为光标for循环会自动关闭光标。

作者: LuiseRADL   发布时间: 2011-11-09

只有在显式Open的时候,才需要显式Close

作者: LuiseRADL   发布时间: 2011-11-09

两种游标使用方式
1.使用for循环的是隐式打开和关闭,不用写代码控制.for循环开始时打开,循环结束时自动关闭
for rec_a_cur in a_cur loop
--逻辑处理
end loop;
2.显式打开和关闭,写代码控制游标开关和循环
open a_cur;
loop
fetch into...
exit when ...
--逻辑处理
end loop;
close a_cur;

作者: tx2730   发布时间: 2011-11-09

引用 3 楼 tx2730 的回复:
两种游标使用方式
1.使用for循环的是隐式打开和关闭,不用写代码控制.for循环开始时打开,循环结束时自动关闭
for rec_a_cur in a_cur loop
--逻辑处理
end loop;
2.显式打开和关闭,写代码控制游标开关和循环
open a_cur;
loop
fetch into...
exit when ...
--逻辑处理
end loop;
c……

你的意思是游标分显式和隐式打开喽?所有的游标都可以用这两种方式来打开吗?

作者: chenhao1208   发布时间: 2011-11-09

光标都可以自己打开,也可以使用光标for循环。
不过一般都是使用光标for循环,因为比较省事。

作者: LuiseRADL   发布时间: 2011-11-09

ref cursor好像只能显式操作,普通的可以用两种方式

作者: tx2730   发布时间: 2011-11-09

for rec_a_cur in a_cur loop

end loop;

这种不需要close,loop完会自动close

作者: wanghaoitfk   发布时间: 2011-11-09