Triggers 我只想用新值或旧值记录表中的所有列,但触发器无法编译
我想在firebird db上创建一个触发器:Triggers 我只想用新值或旧值记录表中的所有列,但触发器无法编译,triggers,firebird,Triggers,Firebird,我想在firebird db上创建一个触发器: SET TERM ^ ; create trigger log_trigger_error for test before insert or update as begin INSERT INTO test_log (a,b) select case when (new.rdb$field_name is null and old.rdb$field_name is not null o
SET TERM ^ ;
create trigger log_trigger_error for test
before insert or update
as
begin
INSERT INTO test_log (a,b)
select case when (new.rdb$field_name is null and old.rdb$field_name is not null
or new.rdb$field_name is not null and old.rdb$field_name is null
or new.rdb$field_name <> old.rdb$field_name)
then new.rdb$field_name
else old.rdb$field_name as a
end , 2 as b
from rdb$relation_fields
where rdb$relation_name ='TEST';
end^
SET TERM ; ^
SET TERM^;
为测试创建触发器日志\u触发器\u错误
在插入或更新之前
作为
开始
插入测试日志(a、b)
当(new.rdb$field_name为null,old.rdb$field_name不为null)时选择case
或者new.rdb$field\u name不为null,而old.rdb$field\u name为null
或new.rdb$field_name old.rdb$field_name)
然后是新的.rdb$field\u名称
else old.rdb$字段名称作为
完,2为b
来自rdb$relationship\u字段
其中rdb$relation_name='TEST';
结束^
设定期限^
您正在为表测试创建触发器,但是在触发器主体中,您在从表rdb$relation\u字段中选择的新和旧上下文变量上使用了。这是不可能的,new
和old
变量仅适用于触发器所在的表
如果要记录对数据的更改,请使用触发器
create trigger log_trigger_error for test before update
as
begin
INSERT INTO test_log (a, b) VALUES(old.a, old.b);
end^
现在,当更新test
表中的记录时,旧值被记录到test\u log
表中。您正在为表test
创建一个触发器,但是在触发器体中,您在select from表rdb$relation\u字段上使用new
和old
上下文变量。这是不可能的,new
和old
变量仅适用于触发器所在的表
如果要记录对数据的更改,请使用触发器
create trigger log_trigger_error for test before update
as
begin
INSERT INTO test_log (a, b) VALUES(old.a, old.b);
end^
现在,当更新test
表中的记录时,旧值被记录到test\u log
表中。感觉问题中的代码是从记录字段重命名的代码复制和修改的。可能值(case when old.a不同于new.a然后是old.a else null end,case when old.b不同于new.b然后是old.b else null end)
和if-to-only insert(仅当其中一个或两个字段不同时插入)可能会实现OP似乎想要做的事情。感觉问题中的代码是从记录字段重命名的代码复制和修改的。可能值(case when old.a不同于new.a然后是old.a else null end,case when old.b不同于new.b然后是old.b else null end)
和if-to-only insert(仅当其中一个或两个不同时插入)可能实现OP似乎想要做的事情。您能描述一下此触发器应该做什么吗?您能描述一下此触发器应该做什么吗?