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 外层循环的标签名