PL/SQL 循环语句
1、基本 LOOP 循环语句
语法:
LOOP 语句序列; END LOOP; 其中,语句序列中需要一个EXIT语句或一个EXIT WHEN语句来中断循环。
实例:
DECLARE x number(2) := 10; BEGIN LOOP dbms_output.put_line(x); x := x + 10; IF x > 50 THEN exit; END IF; END LOOP; dbms_output.put_line('LOOP结束: ' || x); END;
或者
使用EXIT WHEN语句来代替EXIT语句:
DECLARE x number(2) := 10; BEGIN LOOP dbms_output.put_line(x); x := x + 10; EXIT WHEN x > 50; END LOOP; dbms_output.put_line('LOOP结束: ' || x); END;
2、WHILE LOOP 语句
语法:
WHILE 条件 LOOP 语句序列; END LOOP;
实例:
DECLARE x number(2) := 10; BEGIN WHILE x < 20 LOOP dbms_output.put_line(x); x := x + 1; END LOOP; END;
3、FOR LOOP 语句
语法:
FOR counter IN initial_value .. final_value LOOP 语句序列; END LOOP; 说明: 循环变量或计数器的initial_value和final_value可以是文字,变量或表达式,但必须对数字求值。 否则,PL/SQL引发预定义的异常VALUE_ERROR; initial_value不必为1; 但是,循环计数器增量(或减量)必须为1; PL/SQL允许在运行时动态地确定循环范围。
实例:
DECLARE x number(2); BEGIN FOR x IN 10 .. 20 LOOP dbms_output.put_line(x); END LOOP; END; 输出结果: 10 11 12 13 14 15 16 17 18 19 20
反转FOR LOOP语句: DECLARE x number(2) ; BEGIN FOR x IN REVERSE 10 .. 20 LOOP dbms_output.put_line(x); END LOOP; END; 输出结果: 20 19 18 17 16 15 14 13 12 11 10
注:可在任何其他基本循环中使用一个或多个循环,如:while
或for
循环。
4、标记PL/SQL循环
标签使用双尖括号(<<
和>>
)括起来,并显示在LOOP语句的开头。标签名称也可以出现在LOOP
语句的末尾。
实例:
实例1: DECLARE i number(1); j number(1); BEGIN << outer_loop >> FOR i IN 1..3 LOOP << inner_loop >> FOR j IN 1..3 LOOP dbms_output.put_line('i = '|| i || ', j = ' || j); END loop inner_loop; END LOOP outer_loop; END; 实例2: DECLARE x number(2) := 0; BEGIN << mark_loop >> x := x + 1; IF x < 10 THEN dbms_output.put_line(x); GOTO mark_loop; END IF; END;