PL/SQL 标签与GOTO语句

32 篇文章 1 订阅
15 篇文章 1 订阅

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

<<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语句
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并不常用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值