更改Oracle DB表中的检测捕获

时间:2018-04-11 19:57:30

标签: oracle

我想如果能够检测每个列及其值的Oracle DB表中的更改并捕获更改是一个单独的临时表吗?

1 个答案:

答案 0 :(得分:1)

是;人们通常使用触发器做到这一点。

这是一个简单的例子:

SQL> create table dept_log
  2    (deptno number,
  3     dname  varchar2(20),
  4     loc    varchar2(20),
  5     when   date
  6    );

Table created.

SQL>
SQL> create or replace trigger trg_bu_dept
  2    before update on dept
  3    for each row
  4  begin
  5    if :new.dname <> :old.dname or
  6       :new.loc   <> :old.loc
  7    then
  8       insert into dept_log (deptno, dname, loc, when)
  9         values (:new.deptno, :old.dname, :old.loc, sysdate);
 10    end if;
 11  end;
 12  /

Trigger created.

SQL> select * from dept;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

SQL> update dept set loc = 'LONDON' where deptno = 40;

1 row updated.

SQL> select * From dept_log;

    DEPTNO DNAME                LOC                  WHEN
---------- -------------------- -------------------- -------------------
        40 OPERATIONS           BOSTON               11.04.2018 22:00:23

SQL>