PL/SQL goto語句

2019-10-16 22:54:06

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

注意 - 在任何程式設計語言中不推薦使用GOTO語句,因為它難以追蹤程式的控制流程,使程式難以理解和難以修改。 任何使用GOTO的程式都可以重寫,以便將GOTO語句替換成其它語句。

語法

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

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

流程圖

例子

有關goto語句的使用範例,請參考以下程式碼實現 -

SET SERVEROUTPUT ON SIZE 99999;
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; 
/

當上述程式碼在SQLPlus提示符下執行時,它會產生以下結果 -

GOTO語句局限性

PL/SQL中的GOTO語具有以下局限性 -

  • GOTO語句不能分支到IF語句,CASE語句,LOOP語句或子塊中。
  • GOTO語句不能從一個IF語句子句分支到另一個IF語句,或從一個CASE語句的WHEN子句分支到另一個。
  • GOTO語句不能從外部塊分支到子塊(即,內部BEGIN-END塊)。
  • GOTO語句不能分支出子程式。要儘早結束子程式,請使用RETURN語句或將GOTO分支到子程式結束之前的某個地方。
  • GOTO語句不能從例外處理程式分支回當前的BEGIN-END塊。 但是,GOTO語句可以從例外處理程式分支到一個封閉的塊中。