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语句可以从异常处理程序分支到一个封闭的块中。