感谢Frank Zhou的指点,asktom上面有很好的说明:

http://asktom.oracle.com/pls/ask ... ON_ID:1357244410566

a before trigger can prevent the work from ever taking place -- an AFTER trigger

will have allowed the work to happen.  So, if you were using a statement trigger to do

additional privilege checking -- it would be infinitely more performant in a BEFORE

trigger, thereby preventing the work from ever happening (less wasted cycles processing a

statement that will be rolled back which itself is expensive).

A before row level trigger can modify the :new values, an after row trigger cannot.

a before trigger has limitations too -- let's compare a before to an after ROW trigger:

a) before for each row -- can modify the values HOWEVER, a before for each row trigger cannot see

what value will actually be placed into the table (hence, never use a before for each row trigger

to verify values!!! it may not be seeing the final value)

b) after for each row -- cannot modify the values HOWEVER, an after for each row trigger sees the

value of the column(s) that will actually be inserted into the table.

(ONLY the after for each row can look at a "stable" value in the :new record.  So, if you

doing data validation , you should do that in an AFTER trigger because the BEFORE triggers may change the

value on you (and since BEFORE triggers fire in SOME RANDOM order -- you cannot be

assured that your BEFORE trigger fires before or after some other BEFORE trigger.

use BEFORE FOR EACH row when you need to WRITE to the :new record

use AFTER FOR EACH row triggers when you want to VALIDATE the final values

in the :new record

)

Additionally -- you'll find an AFTER trigger to cause less redo to be generated.

Note:  ( Oracle documents )

AFTER row triggers are slightly more efficient than BEFORE row triggers. With BEFORE row triggers, affected data blocks must be read (logical read, not physical read) once for the trigger and then again for the triggering statement.

Alternatively, with AFTER row triggers, the data blocks must be read only once for both the triggering statement and the trigger.

大意:

Before 触发器可以防止修改发生, after触发器则为事后校验; 如果是做权限检查, 用BEFORE触发器更为高效,因为可以减少昂贵的回滚处理。

BEFORE 行触发器可以修改:NEW的值,AFTER行触发器不可以。BEFORE行触发器看到的不是最终的值,而且如果有多个BEFORE行触发器,它们的触发是无序的、随机的,在一个触发器中看到的数据可能随后被另一个改动,所以不能用于数据校验,应该改用AFTER行触发器。

如果你需要修改:NEW的值就用BEFORE行触发器,如果你需要校验:NEW的值就用AFTER行触发器。此外AFTER触发器会产生较少的REDO。

Oracle文档中的注解:

AFTER行触发器比BEFORE行触发器稍微高效。使用BEFORE触发器,涉及到的数据块必须为触发器读入一次然后又为触发的语句读入一次(逻辑读,非物理读)。而AFTER行触发器则只需读一次。

oracle before after 触发器,触发器 after before 之间的区别相关推荐

  1. oracle类型sql转为mysql_Oracle和MySql之间SQL区别(等效转换以及需要注意的问题)...

    >本篇博文是Oracle和MySQL之间的等效SQL转换和不同,目前市面上没有转换两种SQL的工具,小编觉得以后也不一定会有,于是在业余时间整理了一下,如果有什么错误之处请留言告知,小编也是刚 ...

  2. ibm websphere oracle weblogic,对比平台--WebLogic与WebSphere之间的区别

    通过各种协议(包括HTTP)向各种客户端应用程序提供对业务功能的访问的服务器.客户端应用程序可以使用这些功能,就像调用对象的方法一样.应用服务器管理自己的资源,例如安全性,事务处理,消息传递,资源池. ...

  3. oracle if 使用函数,oracle函数NVL,NVL2和NULLIF之间的区别和使用

    oracle用这么几个函数,可以帮助我们解决数据上null或0的处理 1.NVL()函数 1.1)介绍:NVL(expr1,expr2),若expr1为null, 返回expr2; 不为null,返回 ...

  4. 序列、触发器和存储过程三者之间有啥关系

    序列.触发器和存储过程三者之间有啥关系? 好久没用oracle数据库了,今天复习了下oracle的序列.触发器和存储过程,之前对触发器和存储过程的概念有点模糊,今天来理理复习心得:存储过程相当于打包好 ...

  5. Oracle学习笔记十三 触发器

    2019独角兽企业重金招聘Python工程师标准>>> 简介 触发器是当特定事件出现时自动执行的存储过程,特定事件可以是执行更新的DML语句和DDL语句,触发器不能被显式调用. 触发 ...

  6. oracle行级的触发器,Oracle触发器Trigger2行级

    create table trigger_t2( id int, name varchar(30), age int ); /* --创建一个before update的触发器-控制每一行,行级 -- ...

  7. 触发器、锁存器、寄存器以及它们之间的区别

    一.基本概念 (1)锁存器 1. 锁存器(latch):是电平触发的存储单元,数据存储的动作(状态转换)取决于输入时钟(或者使能)信号的电平值,尽当锁存器处于使能状态时,输出才会随着数据输入发生变化. ...

  8. mysql触发器和oracle,MySQL与Oracle 差异比较之六触发器

    MySQL与Oracle 差异比较之六触发器 触发器 编号 类别 ORACLE MYSQL 注释 1 创建触发器语句不同 create or replace trigger TG_ES_FAC_UNI ...

  9. Oracle中用户和架构之间的区别?

    本文翻译自:Difference between a user and a schema in Oracle? Oracle中的用户和架构有什么区别? #1楼 参考:https://stackoom. ...

  10. FPGA锁存器、触发器、寄存器和缓冲器的区别

    一.锁存器 锁存器(latch)---对脉冲电平敏感,在时钟脉冲的电平作用下改变状态 锁存器是电平触发的存储单元,数据存储的动作取决于输入时钟(或者使能)信号的电平值,仅当锁存器处于使能状态时,输出才 ...

最新文章

  1. 每天进步一点之C\C++
  2. VSC为_锐志 VSC 警告灯间歇点亮
  3. jquery的鼠标移入移出事件hover、mouseenter、mouseleave、mouseover、mouseout
  4. 玩Azkaban跳过的坑
  5. 巴川数据科学炼成记_【脑王直通车】小小记忆高手炼成记
  6. 新手必看,老鸟绕道–LAMP简易安装
  7. CloudMounter一站式网盘管理工具:将大容量网盘服务巧妙地挂载到系统文件管理器中
  8. 记住这36条创业军规
  9. shell之数学运算
  10. 国外lead,广告联盟常见的任务类型和操作方法
  11. 37岁老表弟接触Python,在危机中抓住新机,3年搭建Python金融“金字塔”
  12. RxSwift-内存管理
  13. Node.js 使用 zlib 内置模块进行 gzip 压缩
  14. 2022-2028全球与中国WiFi拦截器市场现状及未来发展趋势
  15. 行业研究报告-全球与中国电脑机箱风扇市场现状及未来发展趋势
  16. SAP BP屏幕增强页签
  17. 网络抓包技术:libcap
  18. 计算机开机卡在进入桌面的时候,电脑启动时卡在“正在启动WINDOWS”界面如何处理...
  19. 斐波那契堆(Fibonacci heaps)
  20. 火山PC画板自绘打造自定义列表框

热门文章

  1. 数字性格分析测试软件,MBTI性格分析测试
  2. Tapdata PDK 生态共建计划启动,Doris、OceanBase、PolarDB、SequoiaDB 等十余家厂商首批加入
  3. LightGBM -- Light Gradient Boosting Machine
  4. sublimetext3破解版下载与使用方法
  5. 设计模式行为型-状态模式
  6. ECRS标准工时分析软件解析:5S管理是不是过时了?5S管理跟精益生产的关系是什么?
  7. 计算机图形学(六) 绘制渐变色的线
  8. iview-table实现自适应高度渲染表格条数
  9. 美团外卖Android Crash治理之路
  10. 【STM32】STM32的时钟系统