PL/SQL - GOTO 语句

PL/SQL 编程语言中的 GOTO 语句提供从 GOTO 到同一子程序中的标记语句的无条件跳转。

注意 − 在任何编程语言中都不建议使用 GOTO 语句,因为它使跟踪程序的控制流程变得困难,使程序难以理解和难以修改。 任何使用 GOTO 的程序都可以重写,使其不再需要 GOTO。

语法

PL/SQL 中 GOTO 语句的语法如下 −

GOTO label;
..
..
<< label >>
statement;

流程图

PL/SQL goto 语句

示例

DECLARE 
   a number(2) := 10; 
BEGIN 
   <<loopstart>> 
   -- while loop execution  
   WHILE a < 20 LOOP
   dbms_output.put_line ('value of a: ' || a); 
      a := a + 1; 
      IF a = 15 THEN 
         a := a + 1; 
         GOTO loopstart; 
      END IF; 
   END LOOP; 
END; 
/

在 SQL 提示符下执行上述代码时,会产生以下结果 −

value of a: 10 
value of a: 11 
value of a: 12 
value of a: 13 
value of a: 14 
value of a: 16 
value of a: 17 
value of a: 18 
value of a: 19  

PL/SQL procedure successfully completed.

GOTO 语句的限制

PL/SQL 中的 GOTO 语句有以下限制 −

  • GOTO 语句不能分支到 IF 语句、CASE 语句、LOOP 语句或子块。

  • GOTO 语句不能从一个 IF 语句子句分支到另一个或从一个 CASE 语句 WHEN 子句分支到另一个。

  • GOTO 语句不能从外部块分支到子块(即内部 BEGIN-END 块)。

  • GOTO 语句不能从子程序中分支出来。 要提前结束子程序,要么使用 RETURN 语句,要么让 GOTO 分支到子程序结束之前的某个位置。

  • GOTO 语句不能从异常处理程序分支回到当前的 BEGIN-END 块。 但是,GOTO 语句可以从异常处理程序分支到封闭块。

❮ PL/SQL 循环