commit,rollback会将当前session的操作进行提交或者回滚
而 触发器中 只是在执行了部分工作后 的操作,提交整个任务不合理

解决方案 »

  1.   

    当你 执行玩 这些操作以后,进行commit时,会同时对 触发器中的dml操作进行提交。
      

  2.   

    触发器中不能用commit
    使用自治事务
      

  3.   

    当前 session 的含义是什么,我不理解什么就是一个session了,什么只是 session 的一部份,一个session完还是没有完我还是理解不了。请再解释一下吧。^_^
      

  4.   

    触发器里不需要写commit或rollback之类的语句,因为oracle会自动对事务的处理成功与否进行识别,并自动做提交或回退处理
      

  5.   

    tongdan
    是对的!用自治事务,就是触发器的事务独立于基表的事务,在触发器中提交、回滚不影响基表的事务,
    自治事务特别适用于数据库的审计上,比如你举例的应用。具体用法很简单,只是添加一句语句。如下:
    create or replace trg_x
    after
    insert or update or delete on x
    for each rowdeclare
    PRAGMA AUTONOMOUS_TRANSACTION; -- 自治事务
    ....
    begin
      if inserting then
      ....
      ....
      insert into y values(.....);
      commit; -- 可以提交,也可以回滚,不会报错的。
      --rollback;
    end;