触发特定字段变化的触发器 Firebird 3.0

A trigger that triggers a change in a specific field 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 table 中的任何字段。我需要更改它,以便仅在更改 PWDNASH 字段时触发。请帮忙

插入或更新触发器将触发 table 上的任何插入或更新。如果你想在特定字段上有条件行为,你需要在触发器主体中这样做。

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

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,但这并不是必需的,所以我选择了较短的版本。

另请参阅: