1、loop ... end loop loop 循环是最基本的循环,也称为无条件循环。在这种类型的循环中如果没有指定exit字句,将出现死循环。所以在loop循环中必须指定exit语句。loop 循环的语法格式如下:
loop
statements;
exit when condition;
end loop;
所有包含在循环中的语句均会重复执行,在循环的重复或迭代过程中,都要检查退出条件表达式是否为真。如果表达式为真,则会跳过exit后的所有语句,病跳刀end loop后的第一个语句。如果开始就满足了when给出的条件,loop和exit之间的语句只会被执行一次,但如果没有when条件语句,则会出现死循环。loop循环相当于Java 中的do ... while 循环。
SQL> set serveroutput on
SQL> declare
2 i number := 1;
3 begin
4 loop
5 dbms_output.put_line(i || '的平方为' || power(i, 2));
6 i := i + 1;
7 exit when i > 10;
8 end loop;
9 end;
10 /
1的平方为1
2的平方为4
3的平方为9
4的平方为16
5的平方为25
6的平方为36
7的平方为49
8的平方为64
9的平方为81
10的平方为100
PL/SQL 过程已成功完成。
2、while循环
while循环用于事先不知道控制循环终止的变量值的情况。与loop循环的不同之处在于while循环在循环的顶部包括了判断条件。与Java中的while循环相似。
while condition
loop
statements;
end loop;
下边的程序块将使用while循环打印50以内能被3整除的整数。
SQL> set serveroutput on
SQL> declare
2 i number := 1;
3 begin
4 while i < 50 loop
5 if mod(i, 3) = 0 then
6 dbms_output.put_line(i || ' ');
7 end if;
8 i := i + 1;
9 end loop;
10 end;
11 /
3
6
9
12
15
18
21
24
27
30
33
36
39
42
45
48
PL/SQL 过程已成功完成。
3、for循环
for循环使用一个循环计数器,并通过它来控制循环执行次数。计数器可以从小到大记录,也可以从大到小进行记录。如果不满足循环条件,则跳出循环。for 循环的语法结构如下:
for loop_variable_name in [reverse] lower_bound...upper_bound
loop
statements;
end loop
loop_variable_name参数指定循环计数器,循环计数器按照步长1递增,当使用关键字reverse上,表示递减。lower_bound 和upper_bound则指定了循环计数器的下限和上限。例如:下面的程序通过for循环计算1到100之间的整数之和。
SQL> set serveroutput on
SQL> declare
2 sum_num number := 0;
3 begin
4 for i in 1..100 loop
5 sum_num := sum_num + i;
6 end loop;
7 dbms_output.put_line(sum_num);
8 end;
9 /
5050
PL/SQL 过程已成功完成。
上边的例子中,循环计数器i不需要在declare部分定义,它属于for循环的一部分。计数器只能在循环体内使用,不能在循环的外部使用循环计数器。当使用reverse时,循环计数器将自动减1,并强制计数器的取值从上限到下限值。
SQL> set serveroutput on
SQL> declare
2 sum_num number := 0;
3 begin
4 for i in reverse 1..100 loop
5 sum_num := sum_num + i;
6 end loop;
7
8 dbms_output.put_line(sum_num);
9 end;
10 /
5050
PL/SQL 过程已成功完成。