在使用触发器的过程中,我们经常发现真正关注的只有一部分数据,并不需要对每个操作都进行触发或处理。

此时可以用到条件触发,条件触发是有限制的,根据不同的需求,可以分为以下几个应用场景:

1.只关注某几列的数据变更,用update of

只有在update后面才能跟of,在insert和delete中无法只关注某几列,

会报错ORA-04073: column list not valid for this trigger type

比如下面的触发器,只关心2个字段的变更

触发器(三、条件触发)

分别执行2个update语句

触发器(三、条件触发)

of后面的字段更新触发了,而没有关注的字段更新没有触发。


2.只关心特定条件的记录,用WHEN

在有些设计不佳的应用中,有些字段可能经常会被update成原值,即无效的update,对这些update根本没有必要关注。

此时可以用when做条件过滤,WHEN条件在几乎所有触发器中都可以使用,并不局限于在update触发器。

下面用一个简单的案例看一下when的用法,判断OBJECT_NAME字段被修改成不一样的值时才执行触发

触发器(三、条件触发)

注意:WHEN条件里的OLD和NEW是不能带冒号:的

否则会报错ORA-25000: invalid use of bind variable in trigger WHEN clause


相关文章: