我自定义了一个异常,发生异后希望执行回滚,但回滚后又要向另外一张表中插数据。代码如下,有没有方法使现?
IF V_TAG=0 THEN
  RAISE e_no_employee;
END IF;EXCEPTION   
   WHEN   e_no_employee   THEN   
      rollback;--下句insert不执行
      insert into TS_CAPTION (TS_NUMBER ,Caption ) values (:new.TS_NUMBER,'请先填写合同信息');
   WHEN OTHERS THEN
      NULL;   

解决方案 »

  1.   

    触发器里是不能commit或rollback的
      

  2.   

    trigger里想控制transaction,采用自治事务.
      

  3.   

    否则的话,insert语句应该能执行,但之后你要commit;
      

  4.   

    触发器里不能使用commit我使用了自治事务能向别表插入数据,但又出现了一个问题,不能修改本表数据,产生死锁
      

  5.   

    首先要说明一下:    在触发器中,他和触发他的事务是同一下事务,如果触发器抛出异常,则整个事务回滚。    如果你捕获了该异常,则不影响整个事务的执行的。    如下所示:
       IF V_TAG=0 THEN 
           RAISE e_no_employee; 
       END IF;   EXCEPTION  
          WHEN e_no_employee  THEN  
                insert into TS_CAPTION (TS_NUMBER ,Caption ) values (:new.TS_NUMBER,'请先填写合同信息'); 
      WHEN OTHERS THEN 
          NULL;