【发布时间】:2018-10-29 18:33:34
【问题描述】:
我将创建一个触发器来审计一个表。假设我的表定义如下。
COUNTRY_ID NOT NULL CHAR(2)
COUNTRY_NAME VARCHAR2(40)
REGION_ID NUMBER
我的日志表创建如下。
create table country_log(
username varchar2(10),
transaction_date date,
new_value varchar(20),
old_value varchar(20)
)
我的半完成触发器如下所示。
CREATE OR REPLACE TRIGGER tr_countryTable
AFTER UPDATE ON COUNTRIES
FOR EACH ROW
BEGIN
insert into country_log (username,transaction_date,new_value,old_value ) values (USER, sysdate,**:New, :Old** );
END;
/
我需要知道如何获取准确更新的列的新旧值,而不是比较 :old 和 :new 中的每个列值。
【问题讨论】:
-
如果更新了多个列怎么办?您想为每列记录多行吗?
-
假设一次只有一个字段将在此表上更新。
-
顺便说一下,Oracle 中的标准字符串数据类型是
varchar2,而不是varchar或char。 -
更改日志不能识别更改的行有什么用?
标签: oracle plsql database-trigger