触发器的问题
-
重复执行
当数据从一个备份拷贝中加载,或者备份数据库的时候【触发器已经执行过了!!】;
备库应该关闭触发器;有些数据库支持not for replication;
-
触发器链
一个触发器的执行,可能导致另一个触发器…
- 很多触发器的应用都可以通过存储过程来替换
-
side effects
触发器是在主流程之外的动作,很容易被遗忘,造成维护问题
还有一个点,不容易写出一个bug-free的触发器
SQL> create trigger send_mail
2 after insert on purchase_order
3 for each row
4 begin
5 utl_mail.send
6 (sender=>'database@x.com',
7 recipients=>'orders@x.com',
8 subject=>'New Order ' ||
:new.po_number,
9 message=> ' ... ' );
10 end;
11 /
Trigger created.
这段代码看上去没有问题?问题是,如果rollback Transaction 怎么办?!
参考:
http://www.oracle.com/technetwork/issue-archive/2008/08-sep/o58asktom-101055.html