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语句可以从异常处理程序分支到一个封闭的块中。
    原文链接:https://www.yiibai.com/plsql/plsql_goto_statement.html
最后修改:2022 年 01 月 18 日
如果觉得我的文章对你有用,请随意赞赏