CREATE OR REPLACE TRIGGER TRX_CONTRACT_NOT_TRIGGER
   BEFORE    INSERT  ON  TRX_CONTRACT_NOT_SETTLEMENT FOR  EACH  ROW 
    DECLARE 
    n    number(10);
    BEGIN 
      n:=0;
      SELECT  count(*)  INTO n FROM  TRX_CONTRACT_NOT_UPDATEEMENT WHERE CONTRACTID=:NEW.CONTRACTID AND PERIO=:NEW.PERIO;   
      IF n>0 THEN 
        NULL;
      ELSE 
        INSERT INTO   TRX_CONTRACT_NOT_UPDATEEMENT
    (
   ID,          busiType,       busiTypeName, contractId,
   agentAccNo,  agentAccName,   goodsName,    prodFlag,    
   purchPrice,  perio,          flag,         SettledTotal, 
   refundedTotal,  SettledAmont,  settlementTotal, 
   theRefundTotal ,settlementAmont,  BUSI_DUE_DATE, 
   busiDueDate, js_status,sb_person,sh_examine,reg_Oper,UPDATE_TIME
    )
      SELECT 
        
        ID.NEXTVAL ,  busiType,       busiTypeName, contractId,
    agentAccNo,  agentAccName,   goodsName,    prodFlag,    
    purchPrice,  perio,          flag,         SettledTotal, 
    refundedTotal,  SettledAmont,  settlementTotal, 
    theRefundTotal ,settlementAmont,  BUSI_DUE_DATE, 
    busiDueDate, js_status,sb_person,sh_examine,reg_Oper,UPDATE_TIME 
    FROM 
        TRX_CONTRACT_NOT_SETTLEMENT;
      END IF;
      
      
     END ;
报错:触发器/函数不能读取他,请是什么错误
     
     
     
     

解决方案 »

  1.   

    ORA-04091 table string.string is mutating, trigger/function may not see itCause: A trigger (or a user defined PL/SQL function that is referenced in this statement) attempted to look at (or modify) a table that was in the middle of being modified by the statement which fired it.Action: Rewrite the trigger (or function) so it does not read that table.
      

  2.   


    oracle触发器中不能对基本(就是触发器所在的表)进行操作,如果有该需求,请在该触发器中使用自治事务。关于自治事务的详细内容请查阅百度。http://blog.csdn.net/alex197963/article/details/2036500