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;
定义一个异常处理块,并把它放到循环体的最后,在需要continue的时候抛出这个异常。
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 9PL/SQL 过程已成功完成。SQL> 注意:<<next>>标签后的null;语句不可少,因为goto标签后必须紧接着一个执行语句
简单的说,没有。 一般的做法是用goto代替。
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(个人看法)。
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;
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
9PL/SQL 过程已成功完成。SQL> 注意:<<next>>标签后的null;语句不可少,因为goto标签后必须紧接着一个执行语句
一般的做法是用goto代替。
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(个人看法)。