Oracle PL/SQL FOR LOOP 示例
什么是 FOR 循环?
当您想要执行代码的次数是已知的,而不是基于其他条件时,“FOR LOOP”语句是最佳选择。
在这个循环中,指定了一个下限和一个上限,只要循环变量在这个范围内,循环就会执行。
循环变量是自增的,因此无需显式递增操作。循环变量无需声明,因为它已隐式声明。
FOR <loop_variable> in <lower_limit> .. <higher_limit> LOOP <execution block starts> . . . <execution_block_ends> END LOOP;
语法解释:
- 关键字“FOR”表示循环的开始,“END LOOP”表示循环的结束。
- 每次执行执行部分之前,都会对循环变量进行求值。
- 执行块包含所有需要运行的代码,并且可以包含任何可执行语句。
- loop_variable 在循环执行期间隐式声明,其作用域仅限于循环内部。
- 当循环变量超出范围时,控制流退出循环。
- 通过在 lower_limit 前添加关键字 'REVERSE',可以使循环按相反的顺序运行。
例如1: 在这个例子中,我们使用 FOR 循环语句打印 1 到 5 之间的数字。
BEGIN dbms_output.put_line('Program started.'); FOR a IN 1 .. 5 LOOP dbms_output.put_line(a); END LOOP; dbms_output.put_line('Program completed.'); END; /
Code 说明:
- Code 第2行: 打印语句“程序已启动”。
- Code 第3行: 关键字“FOR”标志着循环的开始,循环变量“a”被声明。它现在取值范围为1到5。
- Code 第5行: 打印“a”的值。
- Code 第6行: 关键字“END LOOP”标志着执行块的结束。
- 第 5 行继续执行,直到“a”达到值 6,此时条件不成立,控制退出循环。
- Code 第7行: 打印“程序完成”的声明。
嵌套循环
循环语句也可以嵌套。外层循环和内层循环可以是不同类型的循环。在嵌套循环中,外层循环每次迭代时,内层循环都会完全执行一遍。
LOOP --outer <execution block starts> LOOP --inner <execution_part> END LOOP; <execution_block_ends> END LOOP;
语法解释:
- 外层环内还有一层环。
- 循环可以是任何类型,执行功能都相同。
例如1: 在这个例子中,我们使用 FOR 循环语句打印从 1 到 3 的数字。每个数字打印的次数与其值相同。
DECLARE b NUMBER; BEGIN dbms_output.put_line('Program started'); FOR a IN 1..3 LOOP b:= 1; WHILE (a>=b) LOOP dbms_output.put_line(a); b:= b+1; END LOOP; END LOOP; dbms_output.put_line('Program completed'); END; /
Code 说明:
- Code 第2行: 将变量“b”声明为“NUMBER”数据类型。
- Code 第4行: 打印语句“程序已启动”。
- Code 第5行: 关键字“FOR”标志着循环的开始,循环变量“a”被声明。它现在取值范围为1到3。
- Code 第7行: 每次将“b”的值重置为“1”。
- Code 第8行: 内在 while循环 检查条件 a>=b。
- Code 第10行: 只要满足上述条件就打印“a”的值。
- Code 第14行: 打印“程序完成”的声明。
FOR 循环和反向 FOR 循环
默认情况下,FOR 循环从下限向上计数到上限。添加 REVERSE 关键字使其向下计数,同时保持循环结束。ping 极限的顺序相同。下面将两种形式并列展示,以便清楚地说明它们的区别。
| 产品形态 | 标题 | 数值顺序 |
|---|---|---|
| 上升 | FOR a IN 1 .. 5 | 1,2,3,4,5 |
| 降序 | 反向 1..5 | 5,4,3,2,1 |
请注意,即使使用 REVERSE 函数,下限值仍然会在上限值之前写入;只有迭代方向会改变。对于预先不知道迭代次数的循环, 基本循环 是更好的选择。





