如何在Oracle中编写一个触发器,如果​​执行了CREATE,DROP,ALTER,UPDATE,DELETE,它将记录信息?

时间:2016-04-05 13:11:56

标签: oracle triggers

首先,我想要做的是编写一个触发器,它将在以下表中登录 -

username
modification (like - CREATE ALTER DROP UPDATE DELETE)
datetime (when it happend)

如果发生以下任何情况,请执行-CREATE ALTER DROP UPDATE DELETE,然后触发器将记录信息。

甚至可以这样做吗?

我想出了用于特定表的INSERT UPDATE DELETE的表级触发器。

但是,对于任何对象,我都需要模式级别的所有这些。

如果没有,至少对于任何一个表。

1 个答案:

答案 0 :(得分:2)

这适用于Oracle 11g。我无法记住我从哪里得到它

CREATE OR REPLACE TRIGGER <YourSchema>.audit_ddl_trg
   AFTER DDL
   ON SCHEMA
BEGIN
   IF (ora_sysevent = 'TRUNCATE')
   THEN
      NULL;                                    -- I do not care about truncate
   ELSE
      INSERT INTO <YourSchema>.audit_ddl (d,
                                   osuser,
                                   current_user,
                                   HOST,
                                   terminal,
                                   owner,
                                   TYPE,
                                   name,
                                   sysevent)
        VALUES   (SYSDATE,
                  SYS_CONTEXT ('USERENV', 'OS_USER'),
                  SYS_CONTEXT ('USERENV', 'CURRENT_USER'),
                  SYS_CONTEXT ('USERENV', 'HOST'),
                  SYS_CONTEXT ('USERENV', 'TERMINAL'),
                  ora_dict_obj_owner,
                  ora_dict_obj_type,
                  ora_dict_obj_name,
                  ora_sysevent);
  END IF;
END;