尽量不要使用触发器

 触发器的问题

  • 重复执行

    当数据从一个备份拷贝中加载,或者备份数据库的时候【触发器已经执行过了!!】;

    备库应该关闭触发器;有些数据库支持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=>'[email protected]',
7 recipients=>'[email protected]',
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

你可能感兴趣的:(数据库)