ORACLE PL/SQL 实例精解之第六章 迭代控制之一
6.1 简单循环
简单循环,就想其名称一张,是一种最基本循环。简单循环具有如下结构
LOOP
STATEMENT 1;
STATEMENT 2;
...
STATEMENT N;
END LOOP;
保留字LOOP标识简单循环的开始。STATEMENT1到STATEMENT N 是反复执行的语句序列。这些语句由一个或者多个标准的编程结构组成。END LOOP是标识循环结构结束的保留字
每次循环迭代处理时,一些列语句会执行,然后再次执行循环最开始的语句。上述语句序列会无限制的执行,因为没有语句指定何时循环会终止。因此,简单循环称为无穷循环,因为无法退出这个循环,正确构造的循环需要退出条件,退出条件决定循环终止的情况。退出条件有两种形式:EXIT和EXIT WHEN
1. EXIT语句
使用EXIT子句,当EXIT条件为TRUE时,循环会终止。计算EXIT条件时会使用IF语句。当EXIT语句被计算为TRUE时,执行权会转到END LOOP语句后的第一条可执行语句
LOOP
STATEMENT 1;
STATEMENT 2;
IF CONDIDTION THEN
EXIT;
END LOOP;
STATEMENT 3;
2. EXIT WHEN 语句
只有当EXIT WHEN 语句条件的计算结果为TRUE时,才会终止循环。然后,执行权会转到END LOOP 语句之后的第一条可执行语句。
EXIT WHEN子句的循环结构
LOOP
STATEMENT 1;
STATEMENT 2;
EXIT WHEN CONDIDTION;
END LOOP;
STATEMENT 3;
6.1.2 使用带有EXIT WHEN条件的简单循环
6.2 WHILE 循环
WHILE循环结构:
WHILE CONDITION LOOP
STATEMENT 1;
STATEMENT 2;
......
STATEMENT N;
END LOOP;
保留字WHILE标识循环结构的开始。CONDITION是本训话的测试条件,结果为TRUE或者FALSE.测试结果决定是否执行本循环。语句1~N是重复执行的语句序列。END LOOP是标识循环结构结束的保留字
理解:就是先判断CONDIDTION如果是TRUE满足就进入循环,不满足就结束循环直接执行下一条语句
提前终止循环
在WHILE循环体中,可以使用EXIT和EXIT WHEN语句。如果在测试条件为FALSE之前,EXIT条件为TRUE,则循环会被提前终止。如果在EXIT条件为TRUE之前,测试条件为TRUE,测不算作循环提前终止。
WHILE TEST_CONDIDTION LOOP
STATEMENT 1;
STATEMENT 2;
IF EXIT_CONDITION THEN
EXIT;
END IF;
END LOOP;
STATEMENT 3;
或者
WHILE TEST_CONDIDTION LOOP
STATEMENT 1;
STATEMENT 2;
EXIT WHEN EXIT_CONDITION;
END LOOP;
STATEMENT 3
6.3 数值型FOR循环
FOR loop_counter IN [REVERSE] lower_limit..upper_limit loop
STATEMENT 1;
STATEMENT 2;
.....
STATEMENT N;
END LOOP
保留字FOR标识FOR循环结构的开始。变量loop_counter是以已含定义的索引变量,没有必要再PL/SQL语句块的生命部分定义循环计数器。这个变量是循环结构定义的。lower_limit和upper_limit是两个整数数字或者在运行时计算结果为整数值的表达式,双点号。。是范围操作符。lower_limit和upper_limit是两个整数数字或者在运行时计算结果为整数值的表达式,双点号。。是范围操作符。lower_limit和upper_limit定义循环的迭代次数,其值在循环第一次迭代时计算。语句1到N是反复执行的语句序列。END LOOP是标识循环结构结束的保留字。当循环被定义时,保留字IN或者IN REVERSE必须已经存在。如果使用REVERSE保留字,循环计数器会从上限值迭代到下限值。但是限制规范的语法不会变化。下限制始终会被首先引用。
1. 在循环中使用REVERSE选项
在本节前面,当计算机循环计数器的值时,可以使用两个选项:IN和REVERSE.前面已经讨论过在循环中IN选项的用法。下面的例子演示如何在循环中使用IN REVERSE选项