如何创建Oracle Trigger来记录当前的SQL

时间:2012-10-11 01:03:58

标签: oracle triggers

我目前正在完成一项家庭作业,并且陷入困境。 我想创建一个审计触发器,是的我确实知道FGA,但那并不是我所要求的。 我的触发器需要记录当前的SQL以进行审计。这就是我现在拥有的。 想象一下,我已经创建了我的表来存储插入值。

CREATE OR REPLACE TRIGGER ALL_SQL_AUDIT
AFTER UPDATE ON SCOTT.EMP
FOR EACH ROW
BEGIN
INSERT INTO ALL_SQL_AUDIT(TABLE_NAME, SQL_TEXT, SQL_TYPE, CHANGE_DATE, DB_USERNAME, OS_USERNAME)
SELECT 'SCOTT.EMP',
    SYS_CONTEXT('USERENV','CURRENT_SQL'),
    'UPDATE',
    SYSDATE,
    USER,
    SYS_CONTEXT('USERENV','OS_USER')
FROM dual;
END;
/

问题是SYS_CONTEXT('USERENV','CURRENT_SQL')永远不会返回任何内容,那么是否有人知道如何获取触发此事件的当前DML?

0 个答案:

没有答案