我使用的是DB2 Express-C。 我在表上有ON INSERT触发器,在那里我将新行插入另一个表。 有没有办法不将新行插入到定义触发器的表中?
感谢任何帮助,谢谢
答案 0 :(得分:1)
查看create trigger和INSTEAD OF选项:
指定关联的触发操作替换操作 反对主题观点。只允许一个INSTEAD OF触发器 给定主题视图上的每种操作(SQLSTATE 428FP)。
答案 1 :(得分:0)
通常可以通过评估特殊寄存器(例如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, ...);