create or replace trigger tr_before_insert_employee
  after insert
  on t_employees
  for each row
begin
  :new.work_years :=0;
end;
执行插入语句
insert into t_employees values(employee_seq_nextval,'小龙女',6,'ACT');

把after改成before


create or replace trigger tr_before_insert_employee
  before insert
  on t_employees
  for each row
begin
  :new.work_years :=0;
end;
执行插入语句
insert into t_employees values(employee_seq_nextval,'大龙女',6,'ACT');这两种模式有什么相同点和不同点呀。
从结果上看,没有什么不同,最后的插入的6都被改成了0
请求指点,谢谢!

解决方案 »

  1.   

    举个很简单的例子你就明白了;如果在插入数据的过程中出现问题;t_employees这个表不能插入数据,但是work_years的值是否被更改问题,BEFORE 先更改,后插入-------如果不能插入,还是要更改值
    AFTER 先插入,后更改--------如果不能插入,值不会被更改
      

  2.   

    create or replace trigger tr_before_insert_employee
      after insert
      on t_employees
      for each row
    begin
      :new.work_years :=0;
    end;这个你能编译过去???
    已经insert进去了你就修改不了:new的值了
      

  3.   


    你的触发器可以成功?  一没用自治事务 --这样才行
    create or replace trigger tr_before_insert_employee
    before insert or update of work_years on t_employees for each row
    begin
      :new.work_years :=0;
    end;
      

  4.   

    用了自治事务也不能在after类型的trigger里修改:new的值啊。。
      

  5.   

    create or replace trigger tr_before_insert_employee
    before insert or update of work_years on t_employees for each row
    begin
      :new.work_years :=0;
    end;