【问题标题】:Infinite loop with sql cursor (Oracle 10)带有 sql 游标的无限循环 (Oracle 10)
【发布时间】:2015-04-28 17:29:03
【问题描述】:

我有一个无限循环的光标:

DECLARE
  CURSOR cursor_ab IS
    SELECT num_ab FROM abonne;
BEGIN
  OPEN cursor_ab;
  LOOP
  FETCH cursor_ab INTO numeroAb;
    dbms_output.put_line(numeroAb);
  END LOOP;
  CLOSE cursor_ab;
END;
/

你有什么想法吗?

谢谢,

【问题讨论】:

  • 对于任何编程语言的任何循环,都需要一个停止条件。

标签: sql oracle cursor plsqldeveloper


【解决方案1】:

前面已经指出,这样写循环的时候,需要指定退出条件:

DECLARE
   CURSOR cursor_ab IS
      SELECT num_ab FROM abonne;
BEGIN
   OPEN cursor_ab;

   LOOP
      FETCH cursor_ab INTO numeroab;

      EXIT WHEN cursor_ab%NOTFOUND;
      DBMS_OUTPUT.put_line (numeroab);
   END LOOP;

   CLOSE cursor_ab;
END;
/

但是,您可以在 PL/SQL 中通过让循环管理游标来完成同样的事情:

DECLARE
   CURSOR cursor_ab IS
      SELECT num_ab FROM abonne;
BEGIN
   FOR numeroab IN cursor_ab LOOP
      DBMS_OUTPUT.put_line (numeroab.num_ab);
   END LOOP;
END;
/

【讨论】:

    【解决方案2】:

    你需要出口: 当 cursor_ab%NOTFOUND 时退出;

    【讨论】:

      猜你喜欢
      • 2015-07-06
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 2018-01-12
      • 2023-03-10
      • 2017-06-29
      • 2013-03-25
      • 1970-01-01
      相关资源
      最近更新 更多