根據需求,我需要爲每個表支持兩個必填列:ADDED_DATE,MODIFIED_DATE。
這些用於DBA /審計目的。Oracle表審計的添加日期和修改日期
當我從應用程序中插入/更新記錄時,是否可以使這些東西完全自動化,由數據庫本身支持?
根據需求,我需要爲每個表支持兩個必填列:ADDED_DATE,MODIFIED_DATE。
這些用於DBA /審計目的。Oracle表審計的添加日期和修改日期
當我從應用程序中插入/更新記錄時,是否可以使這些東西完全自動化,由數據庫本身支持?
在表格上創建觸發器(每行更新之前)。
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>
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用於指出插入操作不需要觸發器。 「default sysdate」對於插入工作正常。你只需要觸發更新。 –
的可能重複[如何找出當Oracle表上次更新時間](http://stackoverflow.com/questions/265122/how-to-find-out-when- an-oracle-table-was-updated-the-last-time) – sleske