テーブルの監査に取り組んでいると思います。挿入、更新、削除の監査のトリガーを見つけてください
EDIT:phantom
監査テーブルに挿入する前に、各列の新しい値と古い値を確認する必要があることを示唆しています。この方法で、どの列の値が変更されたかを達成できます。同じレコードの。
私の考えは、監査テーブルに更新/削除/挿入する前に、同じレコードのレプリカを作成することです.そして、変更が必要な場合は、source_action/source_rowidに基づいて監査テーブルの前のレコードと比較します
CREATE TABLE table_for_audit
(
col1 NUMBER,
col2 NUMBER,
col3 NUMBER,
cre_date DATE,
cre_user VARCHAR2 (200)
);
CREATE TABLE audit_table
(
col1 NUMBER,
col2 NUMBER,
col3 NUMBER,
cre_date DATE,
cre_user VARCHAR2 (200),
source_action VARCHAR2 (1),
source_rowid
);
CREATE OR REPLACE TRIGGER trg_table_audit
BEFORE INSERT OR UPDATE OR DELETE
ON table_for_audit
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
v_source_action VARCHAR2 (1);
BEGIN
IF INSERTING
THEN
v_source_action := 'I';
v_source_rowid := :NEW.ROWID;
ELSIF UPDATING
THEN
v_source_action := 'U';
v_source_rowid := :OLD.ROWID;
ELSIF DELETING
THEN
v_source_action := 'D';
v_source_rowid := :OLD.ROWID;
END IF;
IF INSERTING OR UPDATING
THEN
INSERT INTO audit_table (col1,
col2,
col3,
cre_date,
cre_user,
source_action,
source_rowid)
VALUES (:NEW.col1,
:NEW.col2,
:NEW.col3,
SYSDATE,
SYS_CONTEXT ('USERENV', 'CURRENT_USER'),
v_source_action,
v_source_rowid);
ELSIF DELETING
THEN
INSERT INTO audit_table (col1,
col2,
col3,
cre_date,
cre_user,
source_action,
source_rowid)
VALUES (:OLD.col1,
:OLD.col2,
:OLD.col3,
SYSDATE,
SYS_CONTEXT ('USERENV', 'CURRENT_USER'),
v_source_action,
v_source_rowid);
END IF;
END;
/
私の理解が間違っている場合は修正してください。ありがとう