触发器的问题
-
重复执行
当数据从一个备份拷贝中加载,或者备份数据库的时候【触发器已经执行过了!!】;
备库应该关闭触发器;有些数据库支持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
触发器可能导致重复执行和维护困难,特别是在数据备份、复制过程中。触发器链可能引发未预期的行为,而存储过程往往是更好的替代方案。此外,触发器的副作用容易被忽视,编写无错触发器具有一定挑战。例如,如示例所示,当触发器用于发送邮件,在回滚事务时可能会出现问题。
1819

被折叠的 条评论
为什么被折叠?



