因为Oracle规定,触发器中不能进行任何事务操作,
任何对被触发表进行操作的事务都将失败,
所以触发器中不能有Commit

解决方案 »

  1.   

    oracle 规定 不能在触发器中写commit,rollback。
    随触发器的使用者 -- BaseWTInfo_AMD commit,rollback,没什么问题呀?!
      

  2.   

    CREATE OR REPLACE TRIGGER "USERBIMSHR"."BaseWTInfo_AMD" 
        before INSERT OR DELETE 
        ON "USERBIMSHR"."TGWT_BASEWTINFO" 
        FOR EACH ROW 
        declare
          HRID varchar(20);
          CardNum varchar(20);
          DateTimeStr varchar(20);
    beginCardNum :=:NEW.fdcardNumber;
    DateTimeStr:=To_char(:NEW.fdDateTime,'YYYY-MM-DD');
    select fdHRID into HRID from userbimshr.tgHR_BaseInfo where fdWTCardNumber=CardNum;
    Userbimshr.NewWT(HRID,DateTimeStr);
    insert into userbimshr.tempstr (tempstr) values ('ddddd');
    end;
      

  3.   

    不用commit也可以,如果非想用的话,写个过程,在触发器中调用该过程。
      

  4.   

    试想一下,如果在触发器里面可以使用commit,你执行了某个批量更新操作
    每一条都执行触发器的操作,即每一条都commit,
    这样就无法再进行rollback到整个更新操作之前的状态。
      

  5.   

    oracle 规定 不能在触发器中写commit,rollback。
    但你可以在procedure 写commit,rollback;
      

  6.   

    触发器中调用了带有commit的过程啊!
    怎么办啊!!!!!!!