Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle数据库表中的更改检测捕获_Oracle - Fatal编程技术网

Oracle数据库表中的更改检测捕获

Oracle数据库表中的更改检测捕获,oracle,Oracle,我想知道是否有可能检测到Oracle DB表中每个列及其值的更改,并捕获更改是否是一个单独的临时表?是;人们通常使用触发器来实现这一点 下面是一个简单的例子: SQL> create table dept_log 2 (deptno number, 3 dname varchar2(20), 4 loc varchar2(20), 5 when date 6 ); Table created. SQL> SQL&

我想知道是否有可能检测到Oracle DB表中每个列及其值的更改,并捕获更改是否是一个单独的临时表?

是;人们通常使用触发器来实现这一点

下面是一个简单的例子:

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>

那么,工具/UI中没有我可以使用的东西了吗?好吧,在这里调查一下审计:它是内置的Oracle选项,可以让您监视数据库活动。感谢上面的示例。但是改变后的记录不是显示了波士顿而不是伦敦的旧价值观吗??