PL / SQL LOOP


LOOP语句包含关键字LOOP和END LOOP之间的一系列语句,如下所示:

 LOOP    sequence_of_statements  END LOOP;  

执行语句序列,然后控制在循环顶部恢复。

我们可以在基本循环中使用CONTINUE和CONTINUE-WHEN语句。

要防止无限循环,必须使用EXIT或EXIT-WHEN语句。

 

EXIT语句

当遇到EXIT语句时,循环立即退出,并且控制传递到END LOOP之后的语句。

DECLARE   x NUMBER := 0; BEGIN   LOOP     DBMS_OUTPUT.PUT_LINE('Inside loop:  x = ' || TO_CHAR(x));     x := x + 1;      IF x > 10 THEN       EXIT;     END IF;   END LOOP;   DBMS_OUTPUT.PUT_LINE (' After loop:  x = ' || TO_CHAR(x)); END; / 

上面的代码生成以下结果:

EXIT语句

 

EXIT-WHEN语句

遇到EXIT-WHEN语句时,将计算WHEN子句中的条件。

如果条件为真,则循环完成,控制传递到END LOOP之后的语句。

DECLARE  x NUMBER := 0; BEGIN   LOOP     DBMS_OUTPUT.PUT_LINE ('Inside loop:  x = ' || TO_CHAR(x));     x := x + 1;     EXIT WHEN x > 10;   END LOOP;   DBMS_OUTPUT.PUT_LINE ('After loop:  x = ' || TO_CHAR(x)); END; / 

上面的代码生成以下结果:

EXIT-WHEN语句

 

标记PL / SQL循环

循环可以标记。

可选标签(由双尖括号括起来的未声明标识符)必须出现在LOOP语句的开头。

标签名称也可以显示在LOOP语句的末尾。

使用任何形式的EXIT语句,您不仅可以退出当前循环,而且可以退出任何封闭循环。

DECLARE   s  PLS_INTEGER := 0;   i  PLS_INTEGER := 0;   j  PLS_INTEGER; BEGIN   <<outer_loop>>   LOOP     i := i + 1;     j := 0;     <<inner_loop>>     LOOP       j := j + 1;       s := s + i * j;      EXIT inner_loop WHEN (j > 10);       EXIT outer_loop WHEN ((i * j) > 25);     END LOOP inner_loop;   END LOOP outer_loop;   DBMS_OUTPUT.PUT_LINE('The sum: ' || TO_CHAR(s)); END; / 

上面的代码生成以下结果:

标记PL / SQL循环