请问oracle存储过程中,循环的时候有没有像JAVA那种continue 功能

oodick 2010-03-10 01:12:32
RT,
存储过程有没有类似java ,当遇到一定的条件的时候,我需要退出本次循环,进行下次循环的功能???
谢谢
...全文
1514 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
songzhenxun 2011-11-09
  • 打赏
  • 举报
回复
使用goto
duqiangcise 2010-03-12
  • 打赏
  • 举报
回复
create or replace procedure test_proc
as
v_number number:=0;
begin
for i in 1..100 loop
begin
select num into v_number from tab_test where id=to_char(i);
exception
when no_data_found then
null;--有异常时,什么也不执行
end;
end loop;
end test_proc;

就向java中也有goto一样,但在实际的开发中又有谁用goto呢?东跳西跳的,最后把自己给跳晕了。
不建议使用goto(个人看法)。
MountLion 2010-03-11
  • 打赏
  • 举报
回复
简单的说,没有。
一般的做法是用goto代替。
tangren 2010-03-10
  • 打赏
  • 举报
回复
oracle 11g已提供continue;
oracle 10g及以下,使用goto来替代,例如

SQL> set serveroutput on;
SQL> declare
2 begin
3 for i in 1..10 loop
4 if mod(i,2)=0 then
5 goto next;
6 end if;
7 dbms_output.put_line(i);
8 <<next>>
9 null;
10 end loop;
11 end;
12 /
1
3
5
7
9

PL/SQL 过程已成功完成。

SQL>


注意:<<next>>标签后的null;语句不可少,因为goto标签后必须紧接着一个执行语句
chogo 2010-03-10
  • 打赏
  • 举报
回复
定义一个异常处理块,并把它放到循环体的最后,在需要continue的时候抛出这个异常。
47522341 2010-03-10
  • 打赏
  • 举报
回复
declare
i integer;
begin
i := 0;
while i < 10 loop
if i = 3 then
-- i := i +1;
goto end_loop;
end if;
dbms_output.put_line(i);

<<end_loop>>
i:= i+1;
end loop;
end;
47522341 2010-03-10
  • 打赏
  • 举报
回复
将剩余的语句包括在一个if 语句中,if的条件设置为你希望continue的条件
vc555 2010-03-10
  • 打赏
  • 举报
回复
引用 2 楼 jane_64 的回复:
exit退出循环,结合其它条件可以达到进行下次循环的功能。

你exit就退出整个loop了。如何再次loop?
Jane_64 2010-03-10
  • 打赏
  • 举报
回复
exit退出循环,结合其它条件可以达到进行下次循环的功能。
vc555 2010-03-10
  • 打赏
  • 举报
回复
可以通过exception方式来终止本次循环,进入下一次循环。

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧