举例来说:
create table test (id numeric, t date not null);
create trigger test_in
before insert on test
for each row
when New.t is null
begin
-- set New.t = now();
end;
设置New.t不起作用,where can be only select/insert/update/delete stmt.我不能改变数据库结构(可以设置默认值)。由于“非空”约束,插入后触发器也不适用。我找到的唯一解决办法是:
insert into test values (New.id, now());
select raise(ignore);
测试数据库仅用于说明目的,在实践中有更复杂的情况下计算数据。可能会有类似于“update New set New.t = now()"的东西,或者没有?
1条答案
按热度按时间7xzttuei1#
不,你不能更新新的。
我倾向于使用带有INSTEAD OF触发器的VIEW,正如上面评论的mu is too short。
在您的情况下,最好的解决方案可能是使用AFTER UPDATE/UPDATE触发器WHEN NEW.t IS NULL来更新受影响行中的t:
仅供参考,您的
id
列可能应该声明为INTEGER PRIMARY KEY.