触发器代码:
create or replace trigger gps_triger
  before insert ON vehicle_gps_history
  for each row
begin
  update gis_vehicle_gps
     set LONGITUDE   = :NEW.LONGITUDE,
         LATITUDE     = :NEW.LATITUDE,
         KPM          = :NEW.KPM,
         ANGLE        = :NEW.ANGLE,
         MSG_REC_TIME = :NEW.MSG_REC_TIME,
         VEHICLE_NUM  = :NEW.VEHICLE_NUM
   where VEHICLE_ID = :new.VEHICLE_ID;
end;今天的第三次求救了,我往vehicle_gps_history表插入数据,同时触发器更新GIS_VEHICLE_GPS表,只有更新GIS_VEHICLE_GPS表的第一条数据,当插入的数据的VEHICLE_ID不等于GIS_VEHICLE_GPS的第一条记录的VEHICLE_ID时,无法更新。也就是说只能更新第一条记录,为什么啊?

解决方案 »

  1.   

    还不是一个道理啊,你的gis_vehicle_gps表里没有:new.VEHICLE_ID所对应的数据嘛
      

  2.   

    当你插入的VEHICLE_ID和表里的VEHICLE_ID相等时更新,不相等时无更新吗?
    什么第一条数据啊,不懂
      

  3.   

    另外你是要做日志表的话 我觉得你不应该用update 而应该用insert
    你用update的话你下次要更新一个新值又没有
      

  4.   

     where VEHICLE_ID = :new.VEHICLE_ID;这个条件不满足肯定更新不到 
      

  5.   


    你的道理我懂,现在又发现新问题了,我现在的数据库是Oracle,我的gis_vehicle_gps中的数据是从sql Server数据库插入的,采用的是链接服务器+SQL语句的方式,从SQL Server数据库的表读取数据到Oracle数据库,读取的数据无法用触发器更新,但是我在Oracle端手动添加记录到gis_vehicle_gps表后,再往vehicle_gps_history表插入相同VEHICLE_ID的数据时,就可以更新。
        怀疑是从SQL Server查询插入的数据无法更新。
      

  6.   


    是呀看你问三次了  要满足这条件  
    where VEHICLE_ID = :new.VEHICLE_ID;自己做个两表的查询 加个要更新条件 :new.VEHICLE_ID 就知道了
      

  7.   

    你更新gis_vehicle_gps时有条件的啊!当新记录插入vehicle_gps_history中的VEHICLE_ID栏位,不跟gis_vehicle_gps表VEHICLE_ID栏位相等,那么就更新不到啊!你需求是什么?
      

  8.   

    问题已经解决了,是值的事,我从SQL Server读取的数据,由于SQL Server中字段设计长度为10位,而实际值只有8位,导致插入Oracle数据库后数值带了两个空格,所以无法更新。谢谢各位···