oracle执行触发器时报死锁错误

今天在写一个触发器时遇到一个死锁问题,但不知道问题出在哪儿,这个触发器主要是用处是在

T_BS_ORDERDETAIL表做增删改操作时给主表
T_BS_ORDERINFO重新合计重量体积及数量


CREATE OR REPLACE TRIGGER TRIGGER_ORDERDETAIL
  AFTER DELETE OR INSERT OR UPDATE ON T_BS_ORDERDETAIL  FOR EACH ROWDECLARE
  PRAGMA AUTONOMOUS_TRANSACTION;BEGIN
  UPDATE T_BS_ORDERINFO A     SET A.N_ZL      =
         (SELECT SUM(B.N_ZL)            FROM T_BS_ORDERDETAIL B           WHERE B.I_ID_ORDER = :NEW.I_ID_ORDER),
         A.N_TJ      =
         (SELECT SUM(B.N_TJ)            FROM T_BS_ORDERDETAIL B           WHERE B.I_ID_ORDER = :NEW.I_ID_ORDER),
         A.I_ALLCOUNT =
         (SELECT SUM(B.I_COUNT)            FROM T_BS_ORDERDETAIL B           WHERE B.I_ID_ORDER = :NEW.I_ID_ORDER)   WHERE A.ID = :NEW.I_ID_ORDER;    COMMIT;END;


新增时没报错,但修改时就报以下错误


https://img4.mukewang.com/5b99113700014cb303620070.jpg

撒科打诨
浏览 1154回答 1
1回答

长风秋雁

CREATE OR REPLACE TRIGGER TRIGGER_ORDERDETAIL   AFTER DELETE OR INSERT OR UPDATE  ON T_BS_ORDERDETAIL  FOR EACH ROWBEGIN  IF INSERTING THEN    UPDATE T_BS_ORDERINFO A SET A.N_ZL=A.N_ZL+:NEW.N_ZL,                                A.N_TJ=A.N_TJ+:NEW.N_TJ,                                A.I_ALLCOUNT=A.I_ALLCOUNT+:NEW.I_COUNT    WHERE A.ID=:NEW.I_ID_ORDER;   END IF;   IF UPDATING THEN      UPDATE T_BS_ORDERINFO A SET A.N_ZL=A.N_ZL-:OLD.N_ZL+:NEW.N_ZL,                                A.N_TJ=A.N_TJ-:OLD.N_TJ+:NEW.N_TJ,                                A.I_ALLCOUNT=A.I_ALLCOUNT-:OLD.I_COUNT+:NEW.I_COUNT    WHERE A.ID=:NEW.I_ID_ORDER;     END IF;   IF DELETING THEN      UPDATE T_BS_ORDERINFO A SET A.N_ZL=A.N_ZL-:OLD.N_ZL,                                A.N_TJ=A.N_TJ-:OLD.N_TJ,                                A.I_ALLCOUNT=A.I_ALLCOUNT-:OLD.I_COUNT    WHERE A.ID=:OLD.I_ID_ORDER;     END IF;END;
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Oracle