私は、この目的のためにトリガーを作成していたが、私は他の2つのフィールド(LATITUDEとLONGITUDE)を挿入/更新する場合にのみ、1つのフィールド(LOCATION)を更新するためにトリガしますか?
テーブルを取得しています、私はそれを使用する場合、トリガー/関数は
に
やデッドロック警告がそれを見ていないことがあり、変異されています
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フィールドを更新しようとしていますが、動作していないようです。そしてCurrentRowIDがどこにあるのかbus_stops.bus_stop_idを使う必要がありますか?
これは、「BUS_STOPSで更新する前に、BUS_STOPSの更新を含むものを実行する」と言っているからです。あなたはこれを行うことはできません。したがってエラーです。 – Utsav
しかし、AFTER更新はテーブル突然変異を引き起こすでしょうか? – JanisOzolins