如何解决触发特定字段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
,但这并不是必须的,因此我选择了较短的版本。
另请参阅:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。