读书人

请问PL/SQL 循环有关问题 希望各位大大

发布时间: 2013-07-16 22:38:05 作者: rapoo

请教PL/SQL 循环问题 希望各位大大多多指教...
请教PL/SQL 循环问题 希望各位大大多多指教...

Q:我现在要处理一个循环问题,
在一个循环里面执行相关处理,如下:
Loop
执行1,
执行2,
执行3...
end loop;
要求:当在执行到3出现错误时,进行报错,且循环回到从执行1开始。
这个用什么方法?如何实现呢?

请各位大神多多指教。3Q3Q了...


PL/SQL oracle?
[解决办法]
还有一种方式,是可以实现,就是使用GOTO 标签的方式。

在PL/SQL中,使用continue和GOTO。能够解决你的这个问题。
[解决办法]
Loop
<<MY_CONTINUE>>
执行1,
执行2,
执行3
(执行3可以写到一个单独的function或者procedure里,如果执行过程中出现异常,记录异常(日志表)同时返回标志位,如flag=‘errror’)
if flag = 'error' then
GOTO MY_CONTINUE;
end if;

end loop;
[解决办法]
一,continue

在oracle11g以前无法使用continue实现退出当前循环(11g中据说实现了),但是可以用以下方法模拟实现:

declare
--定义变量
begin
for i in 1..10 loop --真正的循环
for j in 1..1 loop --假循环,目的是模拟出continue效果
if i = 6 then
exit;--这个exit相当于continue
end if ;
dbms_output.put_line(i);
end loop ;
end loop;

dbms_output.put_line('over');
end ;

在oracle11g中可以用以下方式实现:

declare
--定义变量
begin
for i in 1..10 loop --真正的循环
if i = 6 then
continue;--用if语句和continue实现
end if ;
dbms_output.put_line(i);


end loop;

dbms_output.put_line('over');
end ;

declare
--定义变量
begin
for i in 1..10 loop --真正的循环
continue when i = 6;--用continue when实现
dbms_output.put_line(i);
end loop;

dbms_output.put_line('over');
end ;

二,break

oracle中并没有break关键字,但是可以用exit关键字来代替break实现退出循环

declare
--定义变量
begin
for i in 1..10 loop
if i < 6 then
exit ;--退出循环,相当于break
end if ;
dbms_output.put_line(i);
end loop ;

dbms_output.put_line('over');
end ;

读书人网 >oracle

热点推荐