PL/SQL 标签与GOTO语句
标签是一个命名标记,用于对程序的特定部分做标记,格式为
<<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语句用法类似,标签还可用于EXIT和CONTINUE语句。
GOTO的限制
- 不能使用
GOTO跳转到IF语句,CASE语句,LOOP语句以及子块内部 - 不能使用
GOTO语句直接从异常处理中跳转回当前的块的执行区中 - 不能使用
GOTO语句直接跳转出子程序(函数或过程),只能跳转到子程序的末尾,GOTO语句只能在当前块中跳转 - 不能从
IF语句的一个分支中用GOTO条件跳转到另一个分支,同样也不能在CASE语句的不同WHEN分支之间进行跳转
GOTO并不常用
虽然在一些特定的情况下,GOTO语句可以更加容易表达某些逻辑。但是GOTO实现的功能,通过IF和CASE也可以实现,而GOTO的引入让代码逻辑变得不太简洁易读,所以GOTO并不常用。
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇:没有了
- 下一篇:没有了
