在PL/SQL編程語言的GOTO語句提供無條件跳轉(zhuǎn)到在同一個子程序的GOTO標簽的語句。
注意:GOTO語句是不建議使用在任何編程語言,因為它使得程序難以跟蹤控制流程,使程序難以理解,難以修改。如果使用GOTO的任何程序可以改寫,就盡量不要使用GOTO語句。
在PL/ SQL一個GOTO語句的語法如下:
GOTO label; .. .. << label >> 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提示符執(zhí)行時,它產(chǎn)生了以下結(jié)果:
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.
PL/SQL GOTO語句強加以下限制:
goto語句不能跳轉(zhuǎn)到IF語句,CASE語句,循環(huán)語句或子塊。
goto語句不能從一個分支IF語句子句到另一個或從一個CASE語句WHEN子句到另一個。
goto語句不能從外部塊分支成子塊(即一個內(nèi)BEGIN-END塊)。
goto語句不能分支出來一個子程序。提前結(jié)束子程序,要么使用RETURN語句或子程序結(jié)束前在正確的GOTO分支的地方。
goto語句不能從一個異常處理分支回到當前BEGIN-END塊。但是,GOTO語句可以從一個異常處理程序跳轉(zhuǎn)到一個封閉塊。