看到到处都是这样的解释:
行级触发器对DML语句影响的每个行执行一次.
语句级触发器对每个DML语句执行一次, (如果一条insert语句在一个表中插入500行, 那么这个表的语句级触发器只执行一次, 而行级触发器要执行500次)
可以按字面意思理解: 行级触发器针对行, 语句级触发器针对语句(一个语句可以包含多行).如何用一条insert语句在一个表中插入500行?
比如我执行一条delete语句(delete from userinfo where email='[email protected]'),对于行级触发器,然后会对这条语句影响的每一行都触发一次触发器?对于语句级触发器只执行一次?
如果行级触发器和语句级触发器执行效果一样?,那两者的实质区别是什么?

解决方案 »

  1.   

    insert 
    select
    在select子查询里的数据可以是多条,不像values只能insert一条数据.
    行级触发器的区别就是你开头说的
      

  2.   

    FOR EACH ROWSpecify FOR EACH ROW to designate the trigger as a row trigger. Oracle Database fires a row trigger once for each row that is affected by the triggering statement and meets the optional trigger constraint defined in the WHEN condition.Except for INSTEAD OF triggers, if you omit this clause, then the trigger is a statement trigger. Oracle Database fires a statement trigger only once when the triggering statement is issued if the optional trigger constraint is met.INSTEAD OF trigger statements are implicitly activated for each row.Restriction on Row Triggers This clause is valid only for DML event triggers, not for DDL or database event triggers.
      

  3.   

    执行一条delete语句(delete from userinfo where email='[email protected]'),假设会删除500行记录,那么对行级触发器来讲,触发器会针对每行记录执行一次触发,也就是共500次触发;而对语句级触发器来讲,触发器只针对这一个语句执行一次触发,所有500行记录只执行一次触发。