更新触发器未在 oracle 中触发

Update Trigger not firing in oracle

嗨,我有这个现有的触发器,我对此很陌生,所以在我的触发器中,我必须捕获插入、更新和删除,但似乎唯一的工作是插入。

CREATE OR REPLACE TRIGGER ATCB_TCM_SAP."TRI_PM_TBLIF240"
AFTER INSERT ON ATCB_TCM_SAP.PM_TBLIF240_TMP FOR EACH ROW
DECLARE
 updating_key_fields EXCEPTION;
BEGIN
IF INSERTING THEN
  INSERT INTO PM_TBLIF240 VALUES (
  :NEW.MSGID,
  :NEW.WERKS,
  :NEW.EQUNR,
  :NEW.MPTYPE,
  :NEW.DATE_,
  :NEW.TIME,
  :NEW.RECDC,
  :NEW.IDIFF,
  :NEW.READR,
  :NEW.IIND,
  :NEW.QMART
  );
END IF;
IF UPDATING THEN
        IF UPDATING('MSGID') THEN
            RAISE updating_key_fields;
        END IF;
  INSERT INTO PM_TBLIF240 VALUES (
  :OLD.MSGID,
  :OLD.WERKS,
  :OLD.EQUNR,
  :OLD.QMART,
  :OLD.MPTYPE,
  :OLD.RECDC,
  :OLD.IDIFF,
  :OLD.READR,
  :OLD.IIND,
  :OLD.DATE_,
  :OLD.TIME
  );
END IF;
IF DELETING THEN
 INSERT INTO PM_TBLIF240 VALUES (
  :OLD.MSGID,
  :OLD.WERKS,
  :OLD.EQUNR,
  :OLD.QMART,
  :OLD.MPTYPE,
  :OLD.RECDC,
  :OLD.IDIFF,
  :OLD.READR,
  :OLD.IIND,
  :OLD.DATE_,
  :OLD.TIME
  );
END IF;
 EXCEPTION
        WHEN updating_key_fields THEN
            raise_application_error(-20300, 'ActiveDB Error: cannot update key fields of source table.');
END;

我已经在 uodating 上试过了

IF UPDATING THEN
        IF UPDATING('MSGID') THEN
            RAISE updating_key_fields;
        END IF;
  INSERT INTO PM_TBLIF240 VALUES (
  :OLD.MSGID,
  :NEW.WERKS,
  :NEW.EQUNR,
  :NEW.MPTYPE,
  :NEW.DATE_,
  :NEW.TIME,
  :NEW.RECDC,
  :NEW.IDIFF,
  :NEW.READR,
  :NEW.IIND,
  :NEW.QMART
  );
END IF;

但还是没有运气。 我尝试更新 table 1 中的时间,但对 table 2 没有影响。 希望有人帮我解决这个问题。

看看第二行:

CREATE OR REPLACE TRIGGER ATCB_TCM_SAP."TRI_PM_TBLIF240"
AFTER **INSERT** ON ATCB_TCM_SAP.PM_TBLIF240_TMP FOR EACH ROW

按照建议,您应该检查第二行。 你是说触发器应该只在 INSERT.

之后执行

改为:

CREATE OR REPLACE TRIGGER atcb_tcm_sap."TRI_PM_TBLIF240" BEFORE
    DELETE OR INSERT OR UPDATE ON atcb_tcm_sap.pm_tblif240_tmp --> this line here
    FOR EACH ROW
DECLARE
    updating_key_fields EXCEPTION;
BEGIN
    IF inserting THEN
        INSERT INTO pm_tblif240 VALUES (
            :new.msgid,
            :new.werks,
            :new.equnr,
            :new.mptype,
            :new.date_,
            :new.time,
            :new.recdc,
            :new.idiff,
            :new.readr,
            :new.iind,
            :new.qmart
        );

    END IF;

    IF updating THEN
        IF updating('MSGID') THEN
            RAISE updating_key_fields;
        END IF;
        INSERT INTO pm_tblif240 VALUES (
            :old.msgid,
            :old.werks,
            :old.equnr,
            :old.qmart,
            :old.mptype,
            :old.recdc,
            :old.idiff,
            :old.readr,
            :old.iind,
            :old.date_,
            :old.time
        );

    END IF;

    IF deleting THEN
        INSERT INTO pm_tblif240 VALUES (
            :old.msgid,
            :old.werks,
            :old.equnr,
            :old.qmart,
            :old.mptype,
            :old.recdc,
            :old.idiff,
            :old.readr,
            :old.iind,
            :old.date_,
            :old.time
        );

    END IF;

EXCEPTION
    WHEN updating_key_fields THEN
        raise_application_error(-20300, 'ActiveDB Error: cannot update key fields of source table.');
END;