我正在为此目的创建一个触发器,但我正在
如果我使用表正在变异,触发/功能可能看不到它
或死锁警告:
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是?
答案 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
选项。