一个before insert trigger
无论是for each row 还是statement的都是insert 一row 就触发一次CREATE OR REPLACE TRIGGER TEST.TRG_TABLE_INSERT
   --after
   BEFORE INSERT ON TEST.TRG
   REFERENCING NEW AS NEW OLD AS OLD
   FOR EACH ROW
DECLARE
   TMPVAR NUMBER;  
BEGIN
   TMPVAR := 0;  
   --:NEW.
   insert into trg_log values('TRG_TABLE_INSERT',sysdate);
EXCEPTION
   WHEN OTHERS THEN
      -- Consider logging the error and then re-raise
      RAISE;
END;
/
有没有FOR EACH ROWinsert into trg values(1,'1111');
insert into trg values(2,'2222');
insert into trg values(3,'3333');
insert into trg values(4,'4444');后
都会发现
在log 有4条

解决方案 »

  1.   


    --此before insert触发器是在你insert数据的时候前一些时间,
    --将你要添加到表中时间字段的系统时间添加进来,
    CREATE OR REPLACE TRIGGER TEST.TRG_TABLE_INSERT
    BEFORE INSERT ON TEST.TRG
    FOR EACH ROW
    BEGIN
      select sysdate into :new.dt from dual;--dt是你添加数据的表的一个时间字段
    END TRG_TABLE_INSERT;
    /
      

  2.   

    我说的意思是,无论是FOR EACH ROW还是statement级别
    触发器都是没一行都触发