用于更新名为' last_modified'的字段我尝试使用触发器自动更新此字段,而不是更改所有更新语句。只有在字段值发生更改时才应更新该字段。这里的问题是,如果添加,删除或重命名表字段,则必须维护触发器。这些字段存储在rdb $ relation_fields中,没问题。但是建立一个动态比较旧值和新值的查询是。
create trigger test for test_table active before update position 0 as
declare variable fn char(31);
begin
for select rdb$field_name from rdb$relation_fields where rdb$relation_name = 'test_table' into :fn do
begin
if ('old.'||:fn <> 'new.'||:fn) then
begin
new.last_modified = current_timestamp;
break;
end
end
end
这里的问题是“旧”。&#39; ||:fn和&#39; new。&#39;:fn并不是真正比较值,而是文字字符串,所以字段的值无法比较。我在这里Firebird - get all modified fields inside a trigger看到触发器附加到系统表,这是我不想要的。
这是一种全自动的方式来更新&#39; last_modified&#39;字段不可能这样吗?或者,我必须创建一个删除al触发器的存储过程,然后在对数据库执行更新后使用新字段重新创建它们(使用此代码http://www.firebirdfaq.org/faq133/)。