【IT168 服务器学院】PL/SQL中如何在抛出异常后继续?
这个问题曾一度让我郁闷,很有用的技巧!
SQL> declare
2 type testitb is table of number index by binary_integer;
a testitb;
b number;
3 4 5 begin
a(10):=11;
6 7 a(1):=12;
a(4):=4;
8 9
for i in a.first .. a.last loop
10 11 b:=i;
12 dbms_output.put_line(''a=''||a(i));
end loop;
13 14 EXCEPTION
WHEN NO_DATA_FOUND THEN
15 16 dbms_output.put_line(''b=''||b);
end;
17 18 /
a=12
b=2
这种情况下当a(2)的时候抛出NO_DATA_FOUND异常,整个block将会退出.修改一下exception的位置,把它放在loop中.
declare
type testitb is table of number index by binary_integer;
a testitb;
b number;
begin
a(10):=11;
a(1):=12;
a(4):=4;
for i in a.first .. a.last loop
begin
b:=i;
dbms_output.put_line(''a=''||a(i));
EXCEPTION
WHEN NO_DATA_FOUND THEN
dbms_output.put_line(''b=''||b);
end;
end loop;
end;
/
a=12
b=2
b=3
a=4
b=5
b=6
b=7
b=8
b=9
a=11
PL/SQL procedure successfully completed.
采取这样的方式就可以不影响整个pl/sql block了.