触发器(一、语句级和行级的区别及使用场景)
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.语句执行完成后,做该语句的后续业务处理,用语句级触发器。