我希望能够在更改特定列时看到。 为了澄清,我不想看到,当一行被更改时。我能够通过ROWDEPENDENCIES和带有时间戳的触发器来实现。使用ROWDEPENDICIES,我可以看到最后一行被修改的时间,但我特别想知道特定列的更改时间。
为了澄清,我想要下表:
id Name Name_modified_on Salary Salary_modified_on
1 Johnson 11.03.16 10:54:27 5000 11.03.16 10:51:27
我该怎么做?谢谢。 PS:我正在运行Oracle 11g。
答案 0 :(得分:1)
试试这段代码:
创建一个表格:
CREATE TABLE TEST
(
ID VARCHAR2(2000 BYTE),
NAME VARCHAR2(2000 BYTE),
NAME_MODIFIED_ON DATE DEFAULT sysdate,
SALARY NUMBER(10),
SALARY_MODIFIED_ON DATE DEFAULT sysdate
);
创建数据库触发器:
DECLARE
/******************************************************************************
NAME: COLUMN_UPDATE_TRG
PURPOSE:
REVISIONS:
Ver Date Author Description
--------- ---------- --------------- ------------------------------------
1.0 4.8.2016 Tomaz Kristan 1. Created this trigger.
NOTES:
Automatically available Auto Replace Keywords:
Object Name: COLUMN_UPDATE_TRG
Sysdate: 4.8.2016
Date and Time: 4.8.2016, 14:33:39, and 4.8.2016 14:33:39
Username: (set in TOAD Options, Proc Templates)
Table Name: Z_TEST (set in the "New PL/SQL Object" dialog)
Trigger Options: (set in the "New PL/SQL Object" dialog)
******************************************************************************/
BEGIN
IF UPDATING THEN
IF ( :new.name is not null AND :new.name != :old.name ) THEN
:new.name_modified_on := sysdate;
END IF;
IF ( :new.salary is not null AND :new.salary != :old.salary ) THEN
:new.salary_modified_on := sysdate;
END IF;
END IF;
EXCEPTION
WHEN OTHERS THEN
-- Consider logging the error and then re-raise
RAISE;
END COLUMN_UPDATE_TRG;