【发布时间】:2018-02-27 03:20:08
【问题描述】:
我创建的触发器有问题。
每次更新行时都会触发我当前的触发器。这在大多数情况下都很好,但似乎编写代码更新表的方式不是我所期望的。
假设我有一个存储已上传文件的表。该表有 10 列。
我有一个触发器,可以记录插入/更新/删除的内容。此审计表有 4 列。
File_Name, File_Content, Upload_Date, User
目前,当我执行上传时,它会插入数据库,它会首先添加条目
TestFile.txt, null, 15-10-2017, ALEX
之后它将执行更新,以结束
TestFile.txt, ABCDEF, 15-01-2017, ALEX.
有了这个,想想还有 5 列一一更新。
这导致我的更新触发器将 5 行插入到 Audit 表中。
有没有办法只获取更新的行的内容并进行插入?
下面是我当前的触发器
CREATE TRIGGER upload_audit_trigger_overwrite
AFTER UPDATE
ON _sys_repo.active_object
REFERENCING NEW ROW mynewrow
BEGIN
INSERT INTO _sys_repo.upload_audit
(file_name, uploaded_by, uploaded_date,
action, cdata, version_id)
VALUES (:mynewrow.object_name, :mynewrow.activated_by, :mynewrow.activated_at,
'OVERWRITE', :mynewrow.cdata, :mynewrow.version_id);
END;
【问题讨论】:
-
您使用的是哪个 dbms? (当涉及到触发器时,许多产品并不完全符合 ANSI。)