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;