有兩點不大明白
1:在一個觸發器中有兩個insert語句,第一個執行失敗,程序會繼續執行嗎,如果執行的話,第二個insert語句成功了,能不能提交。
2:觸發器中的raise_application_error被執行,應該就整個觸發器不執行了吧?錯誤前面執行過的應該是回滾吧。?

解决方案 »

  1.   

    你也可以在异常块你不做任何事情,继续执行下面的insert,也可以直接回滚...
      

  2.   

    触发器回滚,触发语句也被回滚SQL> create table abc(id number,name varchar2(5) not null);Table createdSQL> create table abc_temp(id number ,name varchar2(5) not null, insert_time date);Table createdSQL> create or replace trigger t_abc
      2  after insert on abc
      3  for each row
      4  begin
      5  insert into abc_temp values(:new.id,null,sysdate); --异常
      6  insert into abc_temp values(:new.id,:new.name,sysdate);
      7  end;
      8  /Trigger createdSQL> insert into abc values(1,'aaaaa');insert into abc values(1,'aaaaa')ORA-01400: 无法将 NULL 插入 ("UCNZP"."ABC_TEMP"."NAME")
    ORA-06512: 在 "UCNZP.T_ABC", line 2
    ORA-04088: 触发器 'UCNZP.T_ABC' 执行过程中出错SQL> select * from abc;        ID NAME
    ---------- -----SQL> select * from abc_temp;        ID NAME  INSERT_TIME
    ---------- ----- -----------SQL>