oracle continue

  CREATE
TABLE AREAS
(
  RADIUS  
NUMBER(5),
  AREA   
NUMBER(14,2)
);
方法一:使用 goto
DECLARE
   
pi   CONSTANTNUMBER (9,7)  :=
3.1415927;
   radius        
INTEGER (5);
   area         
NUMBER (14,2);
BEGIN
   radius :
=
0;

   LOOP

      
<<here>>
      radius :
= radius+
1;

      
IF radius=
4
      
THEN
         
GOTO here;
      
ELSE
         area :
=
pi
*
POWER (radius, 2);

         
INSERT
INTO areas
              
VALUES (radius, area);

         
EXIT
WHEN area >
100;
      
END
IF;
   
END LOOP;

   
COMMIT;
EXCEPTION
   
WHEN OTHERS
   
THEN
      
ROLLBACK;
      RAISE;
END;

-- 方法二:使用 exception
-- 利用系统 exception
DECLARE
   pi     CONSTANT NUMBER (
9,7)  :=
3.1415927;
   radius          INTEGER (
5);
   area            NUMBER (
14,2);
   some_variable   NUMBER (
14,2);
BEGIN
   radius :
=
0;

   LOOP
      BEGIN
         radius :
= radius+
1;
         some_variable :
=
1
/ (radius -
4);
         area :
= pi* POWER (radius,2);

         INSERT INTO areas
              VALUES (radius, area);

         EXIT WHEN area
>
100;
      EXCEPTION
         WHEN ZERO_DIVIDE
         THEN
            NULL;
      END;
   END LOOP;

   COMMIT;
EXCEPTION
   WHEN OTHERS
   THEN
      ROLLBACK;
      RAISE;
END;
- 自定义 exception
DECLARE
   
pi              CONSTANTNUMBER (9,7)  :=
3.1415927;
   radius                  
INTEGER (5);
   area                     
NUMBER (14,2);
   e_userdefinedexception   EXCEPTION;
   PRAGMA EXCEPTION_INIT (e_userdefinedexception,
-1401);
BEGIN
   radius :
=
0;

   LOOP
      radius :
= radius+
1;

      
BEGIN
         
IF radius=
4
         
THEN
            RAISE e_userdefinedexception;
         
ELSE
            area :
=
pi
*
POWER (radius, 2);

            
INSERT
INTO areas
                 
VALUES (radius, area);

            
EXIT
WHEN area >
100;
         
END
IF;
      EXCEPTION
         
WHEN e_userdefinedexception
         
THEN
            
NULL;
      
END;
   
END LOOP;

   
COMMIT;
EXCEPTION
   
WHEN OTHERS
   
THEN
      
ROLLBACK;

      RAISE;
END;

方法三、
Loop
...
if(true) then
goto nextloop;
end if;
...
<<next_loop>>
null;
end loop;

oracle11g中增加CONTINUE关键字
    SQL> set serveroutput on
SQL> DECLARE
  2     x number :=0;
  3  BEGIN
  4     dbms_output.put_line('开始计数');
  5     loop
  6        x:=x+1;
  7        if x<=3 then
  8           dbms_output.put_line('计数值:'||x);
  9           continue;
10        end if;
11        dbms_output.put_line('大于3的值:'||x);
12        exit when x>=8;
13     end loop;
14  END;
15  /
开始计数
计数值:1
计数值:2
计数值:3
大于3的值:4
大于3的值:5
大于3的值:6
大于3的值:7
大于3的值:8
PL/SQL 过程已成功完成


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值