Моя проблема заключается в том, что приведенный ниже триггер работает правильно, за исключением того факта, что заявление об обновлении UPDATE my_dblist SET passive_servername = v_newpassive WHERE server = :NEW.server AND dbname = :NEW.dbname;
похоже не происходит. Старая запись удаляется и вставляется в историю правильно, но в новой записи нет старого активного сервера, указанного под именем passive_servername. У меня такое чувство, что это может быть связано с автономностью?Столбец, не обновляющийся в триггере
create or replace
TRIGGER cluster_check
AFTER INSERT ON my_dblist
FOR EACH ROW
DECLARE
pragma autonomous_transaction;
v_duplicates NUMBER;
v_newpassive varchar2(30);
BEGIN
SELECT count(*) INTO v_duplicates FROM my_dblist WHERE passive_servername = :new.server and dbname = :new.dbname order by 1;
IF v_duplicates > 0
THEN
SELECT server INTO v_newpassive FROM my_dblist WHERE passive_servername = :NEW.server AND dbname = :NEW.dbname ORDER BY 1;
UPDATE my_dblist
SET passive_servername = v_newpassive WHERE server = :NEW.server AND dbname = :NEW.dbname;
INSERT INTO my_dblist_history
SELECT * FROM my_dblist WHERE passive_Servername = :NEW.server AND dbname = :NEW.dbname;
DELETE FROM my_dblist
WHERE passive_Servername = :NEW.server AND dbname = :NEW.dbname;
END IF;
commit;
END;
спасибо, я пошел с вашим советом и реализовал несколько триггеров вместо этого. Твой по-настоящему умный парень :) –