日期:2014-05-17  浏览次数:20789 次

关于oracle触发器的问题。。大虾进。。在线等。。。
我要在修改密码的时候触发一个更新表字段里的时间。。就是把修改密码的时间更新为当前时间。。触发器的代码如下:
create   or   replace   trigger   eosoperator_stamp
    before   insert   or   update   of   updatetime   on   eosoperator    
    for   each   row

begin
    :new.updatetime   :=   sysdate;
end   eosoperator_stamp;

那个before应该是after吧。。可是改成after后出错:说ORA-04084:cannot   change   NEW   values   for   this   trigger   type   各位大虾这是什么错啊。。。如果是before就没错。但是触发器不管用啊。。请大虾指点一二啊。。

------解决方案--------------------
1、before insert or update of updatetime on eosoperator
这句话的意思是:当你在插入或更新eosoperator.updatetime字段时,执行触发器。
所以,这一句中的 updatetime 应该替换成你的 密码 字段。

2、那个before应该是after吧。。可是改成after后出错
先假定1、是正确的,如果把before 改成 after,也就表明是在updatetime更新之后,执行 :new.updatetime := sysdate; 而此时,字段updatetime的值已经更新,在更新之后,不能对:new值进行赋值操作。

----------------------------------------
所以,你的触发器应该是这样:
create or replace trigger eosoperator_stamp
before insert or update of 密码字段 on eosoperator
for each row

begin
:new.updatetime := sysdate;
end eosoperator_stamp;