http://www.crossyou.cn/oracle-loop-statement-summary.htm
主要有以下五种循环:Exit When、Loop、While、For(普通循环)、For(游标循环),下面举例一一说明(均为存储过程)。
1、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;
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循环:
- 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;
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循环:
- 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;
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普通循环:
- 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;
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游标循环:
- 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;
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;