您的位置:首页 > 数据库 > SQL

PL/SQL 标签与GOTO语句

2017-02-16 17:08 309 查看

标签

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

<<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
语句用法类似,标签还可用于
EXIT
CONTINUE
语句。

GOTO的限制

不能使用
GOTO
跳转到
IF
语句,
CASE
语句,
LOOP
语句以及子块内部

不能使用
GOTO
语句直接从异常处理中跳转回当前的块的执行区中

不能使用
GOTO
语句直接跳转出子程序(函数或过程),只能跳转到子程序的末尾,
GOTO
语句只能在当前块中跳转

不能从
4000
IF
语句的一个分支中用
GOTO
条件跳转到另一个分支,同样也不能在
CASE
语句的不同
WHEN
分支之间进行跳转

GOTO并不常用

虽然在一些特定的情况下,
GOTO
语句可以更加容易表达某些逻辑。但是
GOTO
实现的功能,通过
IF
CASE
也可以实现,而
GOTO
的引入让代码逻辑变得不太简洁易读,所以
GOTO
并不常用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: