仅当插入/更新了两个其他字段(LATITUDE和LONGITUDE)时才触发更新一个字段(LOCATION)?

时间:2017-01-05 10:32:13

标签: sql oracle triggers

我正在为此目的创建一个触发器,但我正在

  

表正在变异,触发/功能可能看不到它

如果我使用

或死锁警告:

create or replace TRIGGER fill_coordinates
  BEFORE UPDATE OR DELETE OR INSERT ON bus_stops
  FOR EACH ROW
  WHEN ( ( NEW.latitude <> OLD.latitude OR NEW.longitude <> NEW.longitude ) AND ( NEW.longitude IS NOT NULL AND NEW.latitude IS NOT NULL) )
BEGIN  
  UPDATE BUS_STOPS SET LOCATION = 'test location name' WHERE BUS_STOP_ID = CurrentRowID;
END;

当更新或插入LATITUDE和LONGITUDE字段时,我正在尝试更新同一个表中的LOCATION字段,但它似乎不起作用。我是否需要使用bus_stops.bus_stop_id,其中CurrentRowID是?

1 个答案:

答案 0 :(得分:3)

您需要分配新值,而不是更新表格:

create or replace TRIGGER fill_coordinates
  BEFORE UPDATE OR DELETE OR INSERT ON bus_stops
  FOR EACH ROW
  WHEN ( (NEW.latitude <> OLD.latitude OR NEW.longitude <> NEW.longitude ) AND ( NEW.longitude IS NOT NULL AND NEW.latitude IS NOT NULL) )
BEGIN  
  :new.LOCATION := 'test location name';
END;

但是在DELETE触发器中执行此操作并不合理。您可能应该从触发器定义中删除OR DELETE选项。