暂无图片
oracle 表DML审计触发器
我来答
分享
ora_221
2023-03-20
oracle 表DML审计触发器

目的:记录某几张表的INSERT OR UPDATE OR DELETE操作
问题:我在自己的测试环境测试后没有问题,正式环境同样的方式创建触发器后,业务对表无法做变更(总共三张表,有一张表是可以正常记录的,另两张表异常),请问我的语句是否有问题?
我尝试将BEFORE改为after后问题依旧

1、创建触发器记录表
create table AUDIT_DML_TAB
(id_new NUMBER(38),
id_old NUMBER(38),
username VARCHAR2(30),
opt_date DATE,
opt_type VARCHAR2(10),
MODULE VARCHAR2(50),
session_id NUMBER(10),
hostname VARCHAR2(50)
);

2、创建触发器
CREATE OR REPLACE TRIGGER TRI_AUDIT_DML_TAB
BEFORE INSERT OR UPDATE OR DELETE ON oadb.DML_TAB
FOR EACH ROW
BEGIN
IF INSERTING THEN
INSERT INTO AUDIT_DML_TAB
VALUES
(:NEW.ID,
:OLD.ID,
USER,
SYSDATE,
‘INSERT’,
SYS_CONTEXT(‘USERENV’, ‘MODULE’),
USERENV(‘SID’),
SYS_CONTEXT(‘USERENV’, ‘HOST’));
ELSIF UPDATING THEN
INSERT INTO AUDIT_DML_TAB
VALUES
(:NEW.ID,
:OLD.ID,
USER,
SYSDATE,
‘UPDATE’,
SYS_CONTEXT(‘USERENV’, ‘MODULE’),
USERENV(‘SID’),
SYS_CONTEXT(‘USERENV’, ‘HOST’));
ELSIF DELETING THEN
INSERT INTO AUDIT_DML_TAB
VALUES
(:NEW.ID,
:OLD.ID,
USER,
SYSDATE,
‘DELETE’,
SYS_CONTEXT(‘USERENV’, ‘MODULE’),
USERENV(‘SID’),
SYS_CONTEXT(‘USERENV’, ‘HOST’));
END IF;
END;
/

我来答
添加附件
收藏
分享
问题补充
1条回答
默认
最新
Thomas

对业务表DML时,到底报什么错?另外,对于insert, 应该只有:new值,而无:old值,所以应该写成:insert into AUDIT_DML_TAB

VALUES  (:NEW.ID,null,...., 同样,对于delete,应该只有:old值,而无:new值,应写成insert into AUDIT_DML_TAB
VALUES  (null,:OLD.ID,....

暂无图片 评论
暂无图片 有用 1
ora_221
题主
2023-03-21
谢谢!! 有空了我再研究一下
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏