小弟新学写触发器,想写一个当插入一个表一条记录的时候,将某些字段更新到另外一个表,同时更新自己的Sended字段,如下:
create or replace trigger biufer_jydj_record
  after insert on jydj_record    
  for each Row 
declare
  jyjl   jydj_record.jyjl%TYPE;   
  jyrq   jydj_record.jyrq%TYPE; 
  xcjyrq jydj_record.xcjyrq%TYPE; 
  ssbzcdm jydj_record.sbzcdm%TYPE; 
  sId jydj_record.Id%TYPE; 
    
    
Begin
If(jyjl='合格') Then
     Update sbjc Set yxzt='3',jyzt='5',aaa_jyrq=jyrq,nextcheck=xcjyrq Where sbzcdm=ssbzcdm;
     Update jydj_record Set sended='1' Where Id=sId;
End If;
 
end biufer_jydj_record;
/我插入一条记录后,并没有触发,不知道为什么。
请指教。

解决方案 »

  1.   

    试试这样If(:new.jyjl='合格') Then ...
      

  2.   

    改了之后,插入一条记录时报:
    ORA-04091 表jydj_record发生了变化,触发器/函数不能读
    Update jydj_record Set sended='1' Where Id=sId; 指向这一行有错。
      

  3.   

    我将 Update jydj_record Set sended='1' Where Id=sId;
    改成 :new.sended :='1';
    报:ORA-04084:无法更改此类触发器类型的NEW值。。
      

  4.   

    问题解决了,我改用before修改new的值,再写一个after来实现上面的功能。
      

  5.   

    昨天我也遇到过这样的问题:无法更改此类触发器类型的NEW值。。
    把after类型改成before类型就可以了,这是ORACLE自带的一种判断机制。并不是主观想怎么写就怎么写。