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