共计 2707 个字符,预计需要花费 7 分钟才能阅读完成。
在 PL/SQL 中可以使用 LOOP 语句对数据进行循环处理,利用该语句可以循环执行指定的语句序列。常用的 LOOP 循环语句包含 3 种形式:基本的 LOOP、WHILE…LOOP 和 FOR…LOOP。
LOOP 语句的基本语法结构如下:
[<<label_name>>]
LOOP
statement…
END LOOP [label_name]
【语法说明】
<<label_name>>:LOOP 结构的标签,是可选项。
LOOP:LOOP 循环开始标志。
statement:LOOP 语句中循环执行的语句序列。
END LOOP:LOOP 循环结束标志,可以添加 LOOP 结构的标签。
1. 基本的 LOOP 语句
实例:要求声明变量,每次循环都需要为变量增加数字 1,并输出结果。当变量值大于 3 时,退出循环操作。
a、利用 EXIT…WHEN 结束循环操作。
SQL> set serveroutput on;
SQL> –exit when
SQL> declare
2 v_rlt number(8):=-3;
3 begin
4 <<fst_loop>>
5 loop
6 dbms_output.put_line(‘v_rlt = ‘||v_rlt);
7 v_rlt:=v_rlt+1;
8 exit fst_loop when v_rlt > 3;
9 end loop;
10 dbms_output.put_line(‘LOOP 循环已经结束!’);
11 end;
12 /
v_rlt = -3
v_rlt = -2
v_rlt = -1
v_rlt = 0
v_rlt = 1
v_rlt = 2
v_rlt = 3
LOOP 循环已经结束!
PL/SQL procedure successfully completed
b、利用 IF…EXIT 语句结束循环
SQL> –if exit
SQL> declare
2 v_rlt number(8):=-3;
3 begin
4 <<fst_loop>>
5 loop
6 dbms_output.put_line(‘v_rlt = ‘||v_rlt);
7 v_rlt:=v_rlt+1;
8 if v_rlt > 3 then
9 dbms_output.put_line(‘ 变量的值已经大于 3,当前值为 ’||v_rlt);
10 exit fst_loop;
11 end if;
12 end loop fst_loop;
13 dbms_output.put_line(‘LOOP 循环已经结束!’);
14 end;
15 /
v_rlt = -3
v_rlt = -2
v_rlt = -1
v_rlt = 0
v_rlt = 1
v_rlt = 2
v_rlt = 3
变量的值已经大于 3,当前值为 4
LOOP 循环已经结束!
PL/SQL procedure successfully completed
2、WHILE…LOOP 结构
WHILE…LOOP 结构和基本的 LOOP 语句不同,它本身可以结束 LOOP 循环。WHILE 关键词后面需要有布尔表达式,当 WHILE 后面的布尔表达式为 TRUE 时,则循环体重的语句序列被执行 1 次,然后会重新判断 WHILE 后面的表达式是否为 TRUE,只有当 WHILE 后的布尔表达式为 FALSE 时,才结束整个 LOOP 循环。
该语句结构的相关语法如下:
[<<label_name>>]WHILE boolean_expression
LOOP
statement…
END LOOP [label_name];
【语法说明】
boolean_expression:布尔表达式。
statement:语句序列,当 boolean_expression 为 TRUE 时,该语句序列可获得执行权。
c、WHILE…LOOP 结构
SQL> –while…loop
SQL> declare
2 v_rlt number(8):=-3;
3 begin
4 <<while_loop>>
5 while(v_rlt < 4)
6 loop
7 dbms_output.put_line(‘v_rlt = ‘||v_rlt);
8 v_rlt:=v_rlt+1;
9 end loop while_loop;
10 dbms_output.put_line(‘WHILE 循环已经结束!’);
11 end;
12
13 /
v_rlt = -3
v_rlt = -2
v_rlt = -1
v_rlt = 0
v_rlt = 1
v_rlt = 2
v_rlt = 3
WHILE 循环已经结束!
PL/SQL procedure successfully completed
3.FOR…LOOP 结构
FOR…LOOP 语句可以遍历某个范围的整数,该范围被 FOR 和 LOOP 关键词封闭。首次进入循环时,循环范围将被确定,并且以后不会再次计算。每循环一次,循环指数将会自动增加 1。
FOR…LOOP 语句的语法结构如下:
[<<label_name>>]FOR index_name IN[REVERSE]
lower_bound .. upper_bound
LOOP
statement…
END LOOP [label_name];
【语法说明】
index_name:循环计数器,是一个变量,它可以得到当前的循环指数。需要注意的是,不能为其手工赋值。
REVERSE:可选项,指定循环方式。默认的循环方式由下标 (lower_bound) 到上标 (upper_bound)。使用该选项则从上标界到下标界。
lower_bound:循环范围的下标界。
upper_bound:循环范围的上标界。
下标和上标之间的 ”..” 不能省略。
d、FOR…LOOP 结构
SQL> –for..loop
SQL> begin
2 for v_rlt in -3..3 loop
3 dbms_output.put_line(‘v_rlt = ‘||v_rlt);
4 end loop;
5 dbms_output.put_line(‘FOR 循环已经结束!’);
6 end;
7 /
v_rlt = -3
v_rlt = -2
v_rlt = -1
v_rlt = 0
v_rlt = 1
v_rlt = 2
v_rlt = 3
FOR 循环已经结束!
PL/SQL procedure successfully completed
更多 Oracle 相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-09/147150.htm