服务器 频道

PL/SQL中如何在抛出异常后继续

  【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了.

0
相关文章