create table jhmxb(a number,b number,c number);insert into jhmxb values (1,2,3);触发器
create or replace trigger t_jh_cb
  AFTER update of a on jhmxb
  for each row
begin
 if   updating then
update jhmxb set c=0 where a=:new.a;
  end if;
end;就是A字段更新的时候,触发器就把C字段更新为0,
编译可以通过,但是不update  a字段的时候就提示触发器不能读他,
update jhmxb set c=0 where a=:new.a;这个不能这么写?
请问各位这个这么写?
就是update一个字段的时候,触发器同时修改同一个表的另一个字段?

解决方案 »

  1.   

    你对基表操作了,试下直接这样呢
    create or replace trigger t_jh_cb
      BEFORE update of a on jhmxb
      for each row
    begin
     if updating then
        :NEW.c:=0;
      end if;
    END;
      

  2.   


    create or replace trigger t_jh_cb
    before update of a on jhmxb
    for each row
    begin
     if updating then
          :new.c :=0;
      end if;
    end;
    /
      

  3.   

    就楼主的逻辑来看,在UPDATE的时候触发UPDATE,这是死循环了。就算Oracle允许,做你也不能真这么干呀
    楼上几位已经给出答案了,如果是有其他情况可以另外讨论。
      

  4.   


    create or replace trigger t_trigger
    before update on user1
    for each row
    begin
         if :new.id=1 then
          :new.name:=10;
         Elsif :new.id=2 then
         :new.name:=20;
         Elsif :new.id=3 then
       :new.name:=30;
         end if;
    end;