触发特定字段Firebird 3.0中的更改的触发器

问题描述

SET TERM ^ ;
CREATE TRIGGER ADDPWDHASHHISTORY FOR USERS ACTIVE
AFTER INSERT OR UPDATE POSITION 3
AS 
BEGIN
    
    INSERT INTO USERSPWDHASHHISTORY 
    (id,USERID,FIO,PWDHASH,ATTIME)
     values (gen_id(GEN_PWDHASHHIS_ID,1),new.id,new.fio,new.pwdhash,CURRENT_TIMESTAMP);
END^
SET TERM ; ^

此触发器被触发以更改USERS表中的任何字段。我需要更改它,以仅在更改PWDNASH字段时触发。请帮忙

解决方法

插入或更新触发器将触发表上的任何插入或更新。如果要在特定字段上具有条件行为,则需要在触发器主体中执行此操作。

在这种情况下,您将需要执行以下操作:

SET TERM ^ ;
CREATE TRIGGER ADDPWDHASHHISTORY FOR USERS ACTIVE
AFTER INSERT OR UPDATE POSITION 3
AS 
BEGIN
    if (inserting or new.PWDHASH is distinct from old.PWDHASH) then
        INSERT INTO USERSPWDHASHHISTORY 
        (id,USERID,FIO,PWDHASH,ATTIME)
         values (gen_id(GEN_PWDHASHHIS_ID,1),new.id,new.fio,new.pwdhash,CURRENT_TIMESTAMP);
END^
SET TERM ; ^

也就是说,当触发器触发插入操作时,inserting条件成立,而new.PWDHASH is distinct from old.PWDHASH检查更新中值是否已更改。您也可以使用条件inserting or updating and new.PWDHASH is distinct from old.PWDHASH,但这并不是必须的,因此我选择了较短的版本。

另请参阅: