FOR i in c1 LOOP
UPDATE....
COMMIT;
END LOOP;
CLOSE c1;
上面的块命中错误:CLOSE c1
时c1无效,更新运行良好。循环结束后光标是否可能关闭?
答案 0 :(得分:0)
当您使用语法FOR xxx in c1 LOOP
时,光标会在结尾处自动关闭。你不能关闭它两次。
跳过CLOSE c1;
答案 1 :(得分:0)
您有两种选择:
SQL> declare
2 cursor c1 is select * from dept;
3 c1r c1%rowtype;
4 begin
5 open c1;
6 loop
7 fetch c1 into c1r;
8 exit when c1%notfound;
9 dbms_output.put_line(c1r.dname);
10 end loop;
11 close c1;
12 end;
13 /
ACCOUNTING
RESEARCH
SALES
OPERATIONS
PL/SQL procedure successfully completed.
SQL> begin
2 for cur_r in (select * from dept) loop
3 dbms_output.put_line(cur_r.dname);
4 end loop;
5 end;
6 /
ACCOUNTING
RESEARCH
SALES
OPERATIONS
PL/SQL procedure successfully completed.
SQL>
如您所见,两者都产生相同的结果,但第二个更容易维护。
在选项1中,您必须:
在选项2中,您必须:
选择一个你觉得更合适的人(我大多数时候会选择#2)。
截至你得到的错误:没有什么可以关闭的;正如我所说,Oracle为您做到了。删除CLOSE
命令。