Oracle 在循环中关闭时,光标c1无效
上面的块命中错误:无效c1当Oracle 在循环中关闭时,光标c1无效,oracle,loops,cursor,for-in-loop,Oracle,Loops,Cursor,For In Loop,上面的块命中错误:无效c1当关闭c1时,更新运行良好。循环结束后光标是否可能关闭?当您在c1循环中为xxx使用语法时,光标将在结束时自动关闭。你不能关闭它两次 只需跳过关闭c1您有两个选项: 备选案文1: 备选案文2: 正如您所看到的,两者都产生相同的结果,但是第二个结果更容易维护 在选项1中,您必须: 声明游标 声明游标变量 打开光标 取回 注意退出循环 关闭光标 在选项2中,您必须: 声明游标 甲骨文为你做其他一切 选择一个你觉得更合适的(大多数时候我会选择2) 你犯的错误是:没有什
关闭c1
时,更新运行良好。循环结束后光标是否可能关闭?当您在c1循环中为xxx使用语法时,光标将在结束时自动关闭。你不能关闭它两次
只需跳过关闭c1代码>您有两个选项:
备选案文1:
备选案文2:
正如您所看到的,两者都产生相同的结果,但是第二个结果更容易维护
在选项1中,您必须:
- 声明游标
- 声明游标变量
- 打开光标
- 取回
- 注意退出循环
- 关闭光标
在选项2中,您必须:
- 声明游标
- 甲骨文为你做其他一切
选择一个你觉得更合适的(大多数时候我会选择2)
你犯的错误是:没有什么可以关闭的;正如我所说,甲骨文是为你做的。删除CLOSE
命令。您一次又一次地问同一个问题:为什么不简单地接受的答案?很好,如果不跳过CLOSE c1,它会告诉您为什么下一个光标c2
不会执行
你的问题中没有提到任何c2
光标。我刚刚被添加,发现c2
没有执行。以前执行了c1
,但显示错误为无效。一旦跳过关闭c1
两个光标都工作正常..非常感谢!
FOR i in c1 LOOP
UPDATE....
COMMIT;
END LOOP;
CLOSE c1;
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>