表名:test_time_jisuan3表结构如下:字段名称               字段类型    注释                 
id                     char(10)  id
leijiashijian          number      累加时间,默认值为0  
gengxinshijian         date        更新时间现在表中有一条数据
id         leijiashijian             gengxinshijian
1          0                         2010-9-8 9:43:23我写了一个触发器,当这个表被更新时,更新leijiashijian这个字段,值为两次更新时间的差。触发器如下:
create or replace trigger test_time_update before update of gengxinshijian on test_time_jisuan3
for each row
declare
    t_leijia number;begin
    t_leijia := :old.leijiashijian + (:new.gengxinshijian - :old.gengxinshijian)*24*60;
    update test_time_jisuan3 set leijiashijian = t_leijia,gengxinshijian = :new.gengxinshijian where id = '1';
end;触发器编译没有错误,但是更新test_time_jisuan3表时会弹出错误提示
ORA-04091: table AVATAR.TEST_TIME_JISUAN3 is mutating,trigger/function may not see it;
ORA-06512: at "AVATAR.TEST_TIME_UPDATE",line 6
ORA-04088: error during execution of tirgger 'AVATAR.TEST_TIME_UPDATE'更新语句如下:
update test_time_jisuan3 set gengxinshijian = sysdate where id = '1';
commit请各位帮我看一下到底哪错了,谢谢

解决方案 »

  1.   

    这个应该是你在更新test_time_jisuan3表时
    会启动事务表test_time_jisuan3被锁定了 触发器无法操作这个表。
      

  2.   


    create or replace trigger test_time_update 
    before update of gengxinshijian on test_time_jisuan3
    for each row
    declare
      t_leijia number;
    begin
      :new.leijiashijian := :old.leijiashijian + (:new.gengxinshijian - :old.gengxinshijian)*24*60;
    end;
      

  3.   

    create or replace trigger test_time_update 
    before update of gengxinshijian on test_time_jisuan3
    for each row
    declare
      t_leijia number;
    begin
      :new.leijiashijian := :old.leijiashijian + (:new.gengxinshijian - :old.gengxinshijian)*24*60;
    end;