入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

PL/SQL 标签与GOTO语句

创建时间:2017-02-16 投稿人: 浏览次数:903

标签是一个命名标记,用于对程序的特定部分做标记,格式为

<<label>>
statements;

标签可用于程序块,循环以及GOTO等语句。

标记程序块的语法为:

<<block_label>>
DECLARE
...
BEGIN
...
END;

随后在程序块中,可以使用语法

block_label.declared_object

的方式引用对应的程序块中声明的对象。通过这个特性可以实现在嵌套块中具有相同名称的声明对象时,从子块中引用父块中的同名对象。

<<parent>>
DECLARE
  variable1 NUMBER := 0;
BEGIN
  <<child>>
  DECLARE
    variable1 NUMBER := 1;
  BEGIN
    DBMS_OUTPUT.PUT_LINE("parent: " || TO_CHAR(parent.variable1));
     DBMS_OUTPUT.PUT_LINE("child: " || TO_CHAR(child.variable1));
  END;
END;

标记循环的语法为:

<<label>>
LOOP
   sequence_of_statements;
END LOOP label;

在有多重嵌套循环的时候,使用标签可以使程序更加易读。

GOTO语句结合标签使用可以实现无条件的跳转。

BEGIN 
  GOTO label_1;
  statments1;
  <<label_1>>
  statements2;
END;

statments1不会被执行,因为GOTO语句直接把程序流跳转到了statements2处。

GOTO语句用法类似,标签还可用于EXITCONTINUE语句。

GOTO的限制

  • 不能使用GOTO跳转到IF语句, CASE语句,LOOP语句以及子块内部
  • 不能使用GOTO语句直接从异常处理中跳转回当前的块的执行区中
  • 不能使用GOTO语句直接跳转出子程序(函数或过程),只能跳转到子程序的末尾,GOTO语句只能在当前块中跳转
  • 不能从IF语句的一个分支中用GOTO条件跳转到另一个分支,同样也不能在CASE语句的不同WHEN分支之间进行跳转

GOTO并不常用

虽然在一些特定的情况下,GOTO语句可以更加容易表达某些逻辑。但是GOTO实现的功能,通过IFCASE也可以实现,而GOTO的引入让代码逻辑变得不太简洁易读,所以GOTO并不常用。

声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
  • 上一篇:没有了
  • 下一篇:没有了
未上传头像