Oracle 在循环中关闭时,光标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
时,更新运行良好。循环结束后光标是否可能关闭?

当您在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>