【发布时间】:2013-02-14 13:31:47
【问题描述】:
我使用 DB2 Express-C。 我在一个表上有 ON INSERT 触发器,我将新行插入到另一个表中。 有没有办法不将新行插入到定义触发器的表中?
感谢您的帮助,谢谢
【问题讨论】:
-
您在问如何避免在插入时触发触发器?
-
是的,没错,在桌子上
我使用 DB2 Express-C。 我在一个表上有 ON INSERT 触发器,我将新行插入到另一个表中。 有没有办法不将新行插入到定义触发器的表中?
感谢您的帮助,谢谢
【问题讨论】:
看看create trigger 和 INSTEAD OF 选项:
指定关联的触发动作替换动作 反对主体观点。只允许一个 INSTEAD OF 触发器 对给定主题视图的各种操作 (SQLSTATE 428FP)。
【讨论】:
通常可以通过评估特殊寄存器(例如,CURRENT USER)是否具有特定值来完成类似的操作。
create trigger trigger1
after insert on schema.table
referencing new as n
for each row
when (CURRENT USER <> 'NAMSARAY')
insert into schema.tablecopy values (n.c1, n.c2, ...);
如果您使用的是 DB2 9.7 或更高版本,您还可以考虑定义一个变量并使用该变量来控制触发器是否将执行其操作。
create variable schema.var1 smallint default 0;
然后你可以在触发器中检查这个变量的值。除非应用程序已将变量显式设置为预定值(下例中为 -9999),否则触发器将触发:
create trigger trigger2
after insert on schema.table
referencing new as n
for each row
when (schema.var1 <> -9999)
insert into schema.tablecopy values (n.c1, n.c2, ...);
【讨论】: