GOTO语句在PL/SQL中的应用

PL/SQL也提供GOTO语句,其语法是
GOTO label;
这里label是在PL/SQL块中定义的标签.标签是用双箭头括号括起来的.当执行GOTO

语句的时候,控制会立即转到由标签标识的语句.

例如,我们可以按照下面的方式实现前面的循环示例.
Declare
vn:=1;
begin
loop
insert into temptable
values(vn,'loopcount');
vn := vn + 1;
if vn > 50 then
GOTO nextloop;
end if;
end loop;
<>
insert into temptable(char_col)
values('done!');
end;
一:对于GOTO的限制
1:PL/SQL对于GOTO的使用有一些限制.对于块,循环或者IF语句而言,想要从外层跳

转到内层是非法的.下面就是一个非法的例子.
BEGIN
GOTO 1_innerBlock;
BEGIN
......
<<1_innerBlock;>>
......
END;
GOTO 1_INSIDEIF;
if x > 3 then
...
<<1_INSIDEIF>>
insert into ....
end if;
end if;
如果这样的写法是合法的,那么甚至尽管IF条件没有求值为TRUE,IF语句中的语句

也将被执行.在前面的例子中,当X =2 时,INSERT 语句可能要被执行.

2:使用GOTO语句从一个IF子句跳转到另一个子句中也是非法的.
BEGIN
IF X >3 THEN
...
GOTO 1_nextcondition;
ELSE
<<1_nextcondition>>
....
END IF;
END;

3:最后,从一个异常处理块内部跳转到当前块是非法的.
begin
<<1_insert>>
insert into....;
exception when others then
GOTO 1_insert;
end;
二.为循环设定标签
循环本身是可以被设计标签的.如果进行了设定,那么可以在EXIT语句中使用该标

签指明要退出哪个循环.例如:
<<1_outer>>
for v_outerindex in 1..50 loop
...
<<1_inner>>
for v_innerindex in 2..10 loop
...
if v_outerindex > 40 then
exit 1_outer;
end if;
end loop 1_inner;
end loop 1_outer;
如果为循环设定了标签,那么可以在END LOOP 语句的后面包含该标签名,正如上面

的例子中所示的那样.
三.GOTO语句的使用指南
在使用GOTO的时候请一定小心.不必要的GOTO语句会产生出"通心粉代码",这是一

些无目的的跳来跳去的代码,很难理解和进行维护.
几乎所有使用GOTO的情况都可以使用其他的PL/SQL控制结构,例如循环或者条件结

构,来重新进行编写.也可以使用异常处理来退出
深层嵌套的循环,而不用直接跳转到结尾.

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23431185/viewspace-628402/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/23431185/viewspace-628402/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值