У нас есть проблема со следующим триггером. Мы хотели бы вставить строку в таблицу 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;
Как создается «INSTANCEID» при вставке в таблицу «PROCESSSTEP»? Не используется ли последовательность? – Glenn
INSTANCEID сначала создается для таблицы процессов (PROCESS), а затем используется для этапов процесса (PROCESSSTEP) – kkung
Нулевое значение для ': NEW.AUDITTIMESTAMP' также вызовет проблемы. – Glenn