首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

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

2013-07-16 
请教PL/SQL 循环问题 希望各位大大多多指教...请教PL/SQL 循环问题 希望各位大大多多指教... Q:我现在要处

请教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 ;

热点排行