oracle 循环语句总结(break&continue)

 http://www.crossyou.cn/oracle-loop-statement-summary.htm

主要有以下五种循环:Exit When、Loop、While、For(普通循环)、For(游标循环),下面举例一一说明(均为存储过程)。


1、Exit When循环:

  1. create or replace procedure proc_test_exit_when is  
  2. i number;   
  3. begin  
  4. i:=0;   
  5. LOOP   
  6. Exit When(i>5);   
  7. Dbms_Output.put_line(i);   
  8. i:=i+1;   
  9. END LOOP;   
  10. end proc_test_exit_when;  
create or replace procedure proc_test_exit_when is
i number;
begin
i:=0;
LOOP
Exit When(i>5);
Dbms_Output.put_line(i);
i:=i+1;
END LOOP;
end proc_test_exit_when;

2、Loop循环:

  1. create or replace procedure proc_test_loop is  
  2. i number;   
  3. begin  
  4. i:=0;   
  5. loop   
  6. i:=i+1;   
  7. dbms_output.put_line(i);   
  8. if i>5 then  
  9. exit;   
  10. end if;   
  11. end loop;   
  12. end proc_test_loop;  
create or replace procedure proc_test_loop is
i number;
begin
i:=0;
loop
i:=i+1;
dbms_output.put_line(i);
if i>5 then
exit;
end if;
end loop;
end proc_test_loop;

3、While循环:

  1. create or replace procedure proc_test_while is  
  2. i number;   
  3. begin  
  4. i:=0;   
  5. while i<5 loop   
  6. i:=i+1;   
  7. dbms_output.put_line(i);   
  8. end loop;   
  9. end proc_test_while;  
create or replace procedure proc_test_while is
i number;
begin
i:=0;
while i<5 loop
i:=i+1;
dbms_output.put_line(i);
end loop;
end proc_test_while;

4、For普通循环:

  1. create or replace procedure proc_test_for is  
  2. i number;   
  3. begin  
  4. i:=0;   
  5. for i in 1..5 loop   
  6. dbms_output.put_line(i);   
  7. end loop;   
  8. end proc_test_for;  
create or replace procedure proc_test_for is
i number;
begin
i:=0;
for i in 1..5 loop
dbms_output.put_line(i);
end loop;
end proc_test_for;

5、For游标循环:

  1. create or replace procedure proc_test_cursor is  
  2. userRow test%rowtype;   
  3. cursor userRows is  
  4. select * from test;   
  5. begin  
  6. for userRow in userRows loop   
  7. dbms_output.put_line(userRow.id||','||userRow.Name||','||userRows%rowcount);   
  8. end loop;   
  9. end proc_test_cursor;  
create or replace procedure proc_test_cursor is
userRow test%rowtype;
cursor userRows is
select * from test;
begin
for userRow in userRows loop
dbms_output.put_line(userRow.id||','||userRow.Name||','||userRows%rowcount);
end loop;
end proc_test_cursor;

上面所示为存储过程相应代码,你可以通过如下方式进行测试:

进入pl/sql, 执行 文件->新建->程序窗口->空白,拷贝以上各段代码,到pl/sql空白窗口中,安F8执行编译。

再 执行 文件->新建->命令窗口 进入命令窗口 执行一下  set serveroutput on 这句代码,然后,输入exec 相应存储过程,ok。

第5中循环 要求新建一个名为test的表 字段 id、name,插入几条数据,进行测试即可。

 ========

http://q-wong.iteye.com/blog/502823

不能。无break和continue的语法。  
  break可用exit代替。  
  loop  
      ...  
      exit   when   ...;  
      ...  
  end   loop;      
  continue和用自定义异常代替。  
  loop  
      begin  
          ...  
          raise   my_ex;  
          ...  
      exception  
          when   others   then   null;  
      end;  
  end   loop;  

 exit when是跳出整个循环,不是跳出本轮循环。相当于C的break。

BEGIN
<<OUTER>>
FOR I IN 1 .. 10 LOOP
<<INNER>>
FOR  J IN 1..20 LOOP
     DBMS_OUTPUT.PUT_LINE('J IS :'|| J);
     EXIT WHEN J = 10;
END LOOP INNER;
   DBMS_OUTPUT.PUT_LINE('I IS:'||I);
  EXIT WHEN I = 5;
END LOOP OUTER;

END;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值