【问题标题】:Create trigger to insert row after record has been updated在记录更新后创建触发器以插入行
【发布时间】: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。)

标签: sql triggers


【解决方案1】:

我自己设法找到了答案。我将根据另一列上的模式比较旧数据和新数据,如果不同,我会更新。

以下是我的零钱。

CREATE TRIGGER upload_audit_trigger_test AFTER 
INSERT, 
UPDATE 
ON _sys_repo.active_object REFERENCING NEW ROW mynewrow, 
       OLD ROW myoldrow FOR EACH ROW BEGIN WHEN updating THEN IF :mynewrow.version_id <> :myoldrow.version_id THEN
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 IF; 
END;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 2021-12-25
    • 2013-06-11
    • 1970-01-01
    相关资源
    最近更新 更多