【问题标题】:Added date and modified date for Oracle table auditOracle 表审计的添加日期和修改日期
【发布时间】:2012-11-07 15:24:00
【问题描述】:

根据要求,我需要为每个表支持两个强制列:ADDED_DATE、MODIFIED_DATE。
这些旨在用于 DBA/审计目的。

当我从应用程序中插入/更新记录时,是否有可能使这些东西完全自动化,由数据库本身隐式支持?

【问题讨论】:

标签: oracle ddl


【解决方案1】:

在表上创建一个触发器(在更新每一行之前)。

SQL> create table foo (hi varchar2(10), added_date date, modified_date date);

Table created.

SQL> create trigger foo_auifer
  2  before update or insert on foo
  3  for each row
  4  declare
  5  begin
  6    if (inserting) then
  7      :new.added_date := sysdate;
  8    elsif (updating) then
  9      :new.modified_date := sysdate;
 10    end if;
 11  end;
 12  /

Trigger created.

SQL> insert into foo (hi) values ('TEST');

1 row created.

SQL> insert into foo (hi) values ('TEST2');

1 row created.

SQL> update foo set hi = 'MODDED' where rownum  = 1;

1 row updated.

SQL> alter session set nls_date_format='dd-mon-yyyy hh24:mi:ss';

Session altered.

SQL> select * from foo;

HI         ADDED_DATE           MODIFIED_DATE
---------- -------------------- --------------------
MODDED     07-nov-2012 15:28:28 07-nov-2012 15:28:39
TEST2      07-nov-2012 15:28:30

SQL>

【讨论】:

    【解决方案2】:
    create table "db_user"."my_table" (
        ...
        "added_date" date default sysdate,
        "modified_date" date default sysdate
    )
    /
    create or replace
    trigger "db_user"."trg_my_table_audit" 
    before update on my_table for each row 
    begin 
        :new.modified_date := sysdate;
    end;
    

    【讨论】:

    • +1 指出插入不需要触发器。 “默认 sysdate”适用于插入。您只需要更新触发器。
    猜你喜欢
    • 2017-03-23
    • 2018-07-29
    • 2021-09-16
    • 1970-01-01
    • 1970-01-01
    • 2023-02-15
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    相关资源
    最近更新 更多