位置:首页 > 数据库 > PL/SQL在线教程 > PL/SQL GOTO语句

PL/SQL GOTO语句

在PL/SQL编程语言的GOTO语句提供无条件跳转到在同一个子程序的GOTO标签的语句。

注意:GOTO语句是不建议使用在任何编程语言,因为它使得程序难以跟踪控制流程,使程序难以理解,难以修改。如果使用GOTO的任何程序可以改写,就尽量不要使用GOTO语句。

语法:

在PL/ SQL一个GOTO语句的语法如下:

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

流程图:

PL/SQL goto 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提示符执行时,它产生了以下结果:

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. 

使用GOTO语句的限制

PL/SQL GOTO语句强加以下限制:

  • goto语句不能跳转到IF语句,CASE语句,循环语句或子块。

  • goto语句不能从一个分支IF语句子句到另一个或从一个CASE语句WHEN子句到另一个。

  • goto语句不能从外部块分支成子块(即一个内BEGIN-END块)。

  • goto语句不能分支出来一个子程序。提前结束子程序,要么使用RETURN语句或子程序结束前在正确的GOTO分支的地方。

  • goto语句不能从一个异常处理分支回到当前BEGIN-END块。但是,GOTO语句可以从一个异常处理程序跳转到一个封闭块。