删除(或不插入)触发器中的新行

时间:2013-02-14 13:31:48

标签: triggers insert db2

我使用的是DB2 Express-C。 我在表上有ON INSERT触发器,在那里我将新行插入另一个表。 有没有办法不将新行插入到定义触发器的表中?

感谢任何帮助,谢谢

2 个答案:

答案 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, ...);