PL/SQL - GOTO 語句



在 PL/SQL 程式語言中,GOTO 語句提供從 GOTO 到同一子程式中帶標籤語句的無條件跳轉。

注意 - 不建議在任何程式語言中使用 GOTO 語句,因為它使跟蹤程式的控制流變得困難,從而使程式難以理解和修改。任何使用 GOTO 的程式都可以重寫,使其不需要 GOTO。

語法

PL/SQL 中 GOTO 語句的語法如下:

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

流程圖

PL/SQL goto statement

示例

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 語句可以從異常處理程式分支到封閉塊。

plsql_loops.htm
廣告