Oracle 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循环