我們遇到以下觸發器的問題。我們想要在UPDATEPROCESSINFO
表中插入一行,並在新的INSTANCEID
中沒有行時更新它,以用於下一個。插入多行而不是一個的觸發器
但是我們驚訝地發現,有時候我們有多行同一個INSTANCEID
。這是因爲它非常快嗎?如何防止這種情況發生?我們的目標是每INSTANCEID
有一行。
感謝您的幫助
create or replace TRIGGER TRIG_UPDATE_PROCESS_INFO
AFTER INSERT ON PROCESSSTEP
FOR EACH ROW
DECLARE
AUDIT_TIME TIMESTAMP(6);
BEGIN
SELECT MAX(LASTUPDATETIME)
INTO AUDIT_TIME
FROM UPDATEPROCESSINFO
WHERE INSTANCEID = :NEW.INSTANCEID;
IF AUDIT_TIME IS NULL THEN
INSERT INTO UPDATEPROCESSINFO
(INSTANCEID, STEPID, STEPSTATUS, STEPITERATION, LASTUPDATETIME)
VALUES
(:NEW.INSTANCEID, :NEW.STEPID, :NEW.STATUS, :NEW.STEPITERATION, :NEW.AUDITTIMESTAMP);
ELSIF :NEW.AUDITTIMESTAMP > AUDIT_TIME THEN
UPDATE UPDATEPROCESSINFO
SET STEPID = :NEW.STEPID,
LASTUPDATETIME = :NEW.AUDITTIMESTAMP,
STEPSTATUS = :NEW.STATUS,
STEPITERATION = :NEW.STEPITERATION
WHERE INSTANCEID = :NEW.INSTANCEID;
END IF;
END;
當插入'PROCESSSTEP'表時,如何生成'INSTANCEID'?序列沒有被使用? – Glenn
INSTANCEID首先爲進程表(PROCESS)生成,然後用於進程步驟(PROCESSSTEP) – kkung
':NEW.AUDITTIMESTAMP'的空值也會導致問題。 – Glenn