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