在一次存储过程问题排查中,发现需要对于进入for循环的数据再增加一层校验,如果不满足执行条件,则不执行for循环内的脚本。
之前使用if的方式,来判断是否执行某段脚本。对于脚本少的情况影响不大,但是这次存储过程的脚本较多,在大段的脚本上添加if与end if即不方便也容易出错。
所以使用continue的方式,在不满足执行条件时,跳出本次循环,执行下次循环。
另外再对比exit与return用法效果。
Continue:本次循环continue之后的代码不执行,跳出本次循环,执行本循环的下一个循环;
Exit:跳出本循环,执行之后的内容;如果存在上一级循环,则会执行上一级循环的下一次循环;
Return:直接跳出存储过程或函数,即结束。
一、单层循环样例
Continue
declare
begin
for cu in 1..10 loop
if cu = 3 then
continue;
--exit;
end if;
dbms_output.put_line('the cu value is :'||cu);
end loop;
dbms_output.put_line('end loop');
end;
执行结果:
Exit
declare
begin
for cu in 1..10 loop
if cu = 3 then
--continue;
exit;
end if;
dbms_output.put_line('the cu value is :'||cu);
end loop;
dbms_output.put_line('end loop');
end;
执行结果:
Return
declare
begin
for cu in 1..10 loop
if cu = 3 then
--continue;
--exit;
return;
end if;
dbms_output.put_line('the cu value is :'||cu);
end loop;
dbms_output.put_line('end loop');
end;
执行结果:
二、双层循环样例
Continue
declare
begin
for cu1 in 1..3 loop
for cu2 in 11..15 loop
if cu2 = 13 then
continue;
--exit;
--return;
end if;
dbms_output.put_line('the second loop cu value is :'||cu1||':'||cu2);
end loop;
dbms_output.put_line('end the second loop');
dbms_output.put_line('the first loop cu1 value is :'||cu1);
end loop;
dbms_output.put_line('end the first loop');
end;
执行结果:
Exit
declare
begin
for cu1 in 1..3 loop
for cu2 in 11..15 loop
if cu2 = 13 then
--continue;
exit;
--return;
end if;
dbms_output.put_line('the second loop cu value is :'||cu1||':'||cu2);
end loop;
dbms_output.put_line('end the second loop');
dbms_output.put_line('the first loop cu1 value is :'||cu1);
end loop;
dbms_output.put_line('end the first loop');
end;
执行结果:
Return
declare
begin
for cu1 in 1..3 loop
for cu2 in 11..15 loop
if cu2 = 13 then
--continue;
--exit;
return;
end if;
dbms_output.put_line('the second loop cu value is :'||cu1||':'||cu2);
end loop;
dbms_output.put_line('end the second loop');
dbms_output.put_line('the first loop cu1 value is :'||cu1);
end loop;
dbms_output.put_line('end the first loop');
end;
执行结果:
三、扩展:oracle的三类循环写法
for ...... loop
......
end loop;
while ...... Loop
......
end loop;
Loop
......
Exit when
......
End loop; 参考资料:
jingyan.baidu.com/article/c27…