PL/SQL - GOTO 语句

  • 简述

    GOTO PL/SQL 编程语言中的语句提供了从 GOTO 到同一子程序中标记语句的无条件跳转。
    NOTE− 在任何编程语言中都不推荐使用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 语句可以从异常处理程序分支到封闭块中。