触发器(一、语句级和行级的区别及使用场景)

Oracle触发器分为语句级(STATEMENT)和行级(ROW)两种,从字面意思上理解,

语句级触发器是指一条SQL语句触发一次;

行级触发器是指一条SQL语句影响的每一行触发一次。

看个案例就很明显了

先建2张测试表from_table和to_table,from_table插入5条记录

触发器(一、语句级和行级的区别及使用场景)

接着在to_table上建2个触发器,分别是语句级和行级,其中行级触发器有for each row的声明

触发器(一、语句级和行级的区别及使用场景)

下面执行一条insert语句,把from_table中的每一行写入到to_table中

触发器(一、语句级和行级的区别及使用场景)

发现2个现象:

1.行级触发器触发了5次,即每一行触发1次;语句级触发器只触发了1次;

2.语句级触发器在行级触发器之后触发(AFTER的时候),如果用BEFORE触发,则语句级触发器先执行。


那么这2种触发器分别在什么情况下使用呢?

1.如果需要对每一行数据做处理,使用行级触发器

2.语句执行完成后,做该语句的后续业务处理,用语句级触发器。