【发布时间】:2012-02-20 05:52:29
【问题描述】:
例如:
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;
Set 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()”之类的东西,还是没有?
【问题讨论】:
-
你能用 INSTEAD OF 触发器创建一个视图并插入到视图中吗?
-
这也是决定的变体,但不能解决问题。在我的情况下,表是在同步过程中创建的。之后我可以运行任何 ddl。
-
在主数据库模型中也使用了带 set stmt 的触发器。我可以创建视图,但必须更改和编程(如果可以的话……)
-
是的,选择 raise(ignore) 方法有效。
-
@Nico 这里好像删掉了一些cmets,能解释一下raise(ignore)的方法吗?