我现在  有一个表A      有两个字段  aa    char(5)  和  bb  char(5);      
另一个表B    两个字段    cc    char(5)  和dd  char(1);    
创建一存储过程  
create  or  replace  trigger  test    after  insert  on  A    
   for  each  row  
declare  
begin  
   insert  into  B(cc,dd)values(:new.aa,:new.bb);  
   commit;  
end  test;      往A表插入数据  
这样做  肯定是错误的插不进去数据,但是  这样做不但B表插不进去数据连A表也插不进数据了  
我想当b表发生问题的时候  不影响A表的数据插入  
请问各位  高手  这个问题怎么解决啊

解决方案 »

  1.   

    Connected to Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 
    Connected as dinyaSQL> --触发器中不允许使用commit, rollback等, 要使用的话,指定为自治事务.SQL> create table a (aa char(5),bb char(5));Table createdSQL> create table b (cc char(5),dd char(1));Table createdSQL> create or replace trigger a_to_b
      2  after insert on a
      3  for each row
      4  begin 
      5      insert into b values(:new.aa,:new.bb);
      6  end;
      7  /Trigger createdSQL> insert into a values('2222','ssss');insert into a values('2222','ssss')ORA-12899: 列 "DINYA"."B"."DD" 的值太大 (实际值: 5, 最大值: 1)
    ORA-06512: 在 "DINYA.A_TO_B", line 2
    ORA-04088: 触发器 'DINYA.A_TO_B' 执行过程中出错SQL> drop trigger a_to_b;Trigger droppedSQL> create or replace trigger a_to_b
      2  after insert on a
      3  for each row
      4  declare
      5      pragma autonomous_transaction;
      6  begin 
      7      insert into b values(:new.aa,:new.bb);
      8      commit;
      9  exception 
     10      when others then 
     11          rollback;
     12          null;
     13  end;
     14  /Trigger createdSQL> insert into a values('1111','OKOK');1 row insertedSQL> commit;Commit completeSQL> select * From a;AA    BB
    ----- -----
    1111  OKOKSQL> select * from b;CC    DD
    ----- --SQL> 
    SQL> --测试完毕.