Oracle PL/SQL 程序设计读书笔记 第5章 用循环进行迭代处理

Oracle PL/SQL 程序设计读书笔记 - 第5章 用循环进行迭代处理

Oracle PL/SQL 程序设计读书笔记 - 第5章 用循环进行迭代处理

5.2 简单循环

LOOP
   executable statement
(s)
END LOOP;
  • 结束条件:简单循环是依赖于循环体内的EXIT语句的执行结束整个循环的,如果EXIT语句不执行,那么简单循环就成了一个无穷循环了。

5.2.1 终止简单循环:EXIT和EXIT WHEN

语法:

EXIT;
EXIT WHEN codition
;

condition是个布尔表达式。

5.2.2 模仿一个REPEAT UNTIL循环

LOOP
   
... body of loop ...
   EXIT WHEN boolean_codition
;
END LOOP;

REPEAT UNTIL循环要求在循环体执行完毕后才测试条件,这种循环保证循环体部分至少会执行一次。

5.2.3 人为的无限循环

LOOP
   data_gathering_procedure
;
   DBMS_LOCK
.sleep(10);
END LOOP;

5.3 WHILE循环

WHILE condition
  LOOP
    executable statement
(s)
END LOOP;

每次循环体执行之前,条件都要被检查。如果结果是TRUE,循环体才会执行,如果结果是FALSE或者NULL,循环终止。 WHILE循环有可能一次都不执行。

5.4 数值型的FOR循环

FOR loop index IN [REVERSE] lowest number .. highest number
LOOP
   executable statements
(s)
END LOOP;
  • 循环结束:数值型的FOR循环只要达到了范围区间指定的次数,就会无条件结束。当然也可以使用EXIT语句终止循环,当不推荐使用这种方法。

5.4.1 使用数值型FOR循环的规则

  • 不要声明循环索引,PL/SQL会自动的,隐式的用一个INTEGER类型的局部变量作为循环索引。该变量的作用范围是循环本身,不能在循环之外在引用这个索引。
  • 在范围部分使用的表达式(包括在下边界和上边界)会在循环开始时被求值一次。范围部分不会随着循环的反复执行被重复求值,如果在循环体内部改变了范围表达式使用的变量,这种改变对于范围边界没有使用作用。
  • 使用REVERSE关键字可以迫使循环从上边界到下边界递减式进行。你必须确保范围声明部分的第一个值要小于第二个值。如果使用了REVERSE关键字,就不要再颠倒这两个值的顺序。

5.5 游标FOR循环

FOR record IN { cursor_name |(explicit SELECT statement)}
LOOP
   executable statement
(s)
END LOOP
  • 结束条件:当游标中的所有记录都取出后,游标型FOR循环就会无条件终止,你也可以使用EXIT语句来终止循环,但并不推荐这么做。

5.6 循环的标签

<<label_a>>
FOR loop index IN [REVERSE] lowest number .. highest number
LOOP
   <
<label_b>>
   FOR loop index IN [REVERSE] lowest number .. highest number
   LOOP
      executable statements(s)
   END LOOP label_b;
END LOOP label_a;
  • 使用循环的标签可以很明确的把循环的开头和结束绑定在一起。
  • 你可以通过使用标签让循环的索引变量命名更规范化。比如label_b.xxx
  • 可以通过在循环体内的EXIT语句之后跟上一个外层循环的标签,从而终止这个被指定的外层循环的执行。

5.7 CONTINUE语句

Oracle数据库11g为循环提供了一个新特性:Continue语句。使用这个语句可以从循环的本次迭代退出,紧接发着立即进入下一次迭代。形式:

CONTINUE
CONTINUE WHEN

也可以通过CONITINUE结束内层循环,紧接着继续外层循环体的下一次迭代。要实现这个目的,你需要使用标签给循环命名。

CONTINUE 外层循环的标签名
原文地址:https://www.cnblogs.com/tjpanda88/p/2245102.html