我使用 DB2 Express-C。我在一个表上有 ON INSERT 触发器,我将新行插入到另一个表中。有没有办法不将新行插入到定义触发器的表中?
任何帮助表示赞赏,谢谢
Take a look at create trigger and the INSTEAD OF option:
Specifies that the associated triggered action replaces the action against the subject view. Only one INSTEAD OF trigger is allowed for each kind of operation on a given subject view (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, ...);