Sql 是否触发仅在插入/更新两个其他字段(纬度和经度)时更新一个字段(位置)?
我正在为此设计一个触发器,但我正在 表正在变化,触发器/函数可能看不到它 或死锁警告(如果我使用):Sql 是否触发仅在插入/更新两个其他字段(纬度和经度)时更新一个字段(位置)?,sql,oracle,triggers,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
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;
创建或替换触发器填充坐标
在更新、删除或插入公共汽车站之前
每行
当((NEW.latitude OLD.latitude或NEW.longitude NEW.longitude)和(NEW.longitude不为NULL,NEW.latitude不为NULL))
开始
更新总线停止设置位置='测试位置名称',其中总线停止ID=CurrentRowID;
结束;
当纬度和经度字段都被更新或插入时,我试图更新同一个表中的位置字段,但它似乎不起作用。我是否需要在CurrentRowID所在的位置使用bus_stops.bus_stop_id?您需要分配新值,而不是更新表格:
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;
创建或替换触发器填充坐标
在更新、删除或插入公共汽车站之前
每行
当((NEW.latitude OLD.latitude或NEW.longitude NEW.longitude)和(NEW.longitude不为NULL,NEW.latitude不为NULL))
开始
:new.LOCATION:=“测试位置名称”;
结束;
但是在
DELETE
触发器中这样做没有意义。您可能应该从触发器定义中删除或DELETE
选项 您需要分配新值,而不是更新表格:
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;
创建或替换触发器填充坐标
在更新、删除或插入公共汽车站之前
每行
当((NEW.latitude OLD.latitude或NEW.longitude NEW.longitude)和(NEW.longitude不为NULL,NEW.latitude不为NULL))
开始
:new.LOCATION:=“测试位置名称”;
结束;
但是在
DELETE
触发器中这样做没有意义。您可能应该从触发器定义中删除或DELETE
选项 这是因为你在说“在更新公交站点之前,做一些事情,包括更新公交站点”。您无法执行此操作,因此会出现错误。但更新后会导致表突变?这是因为您说的是“在更新总线站之前,请执行一些包括更新总线站在内的操作”。无法执行此操作,因此会出现错误。但更新后会导致表突变?这是Oracle SQL语法吗?此触发器返回:bind变量的使用无效(由于WHEN子句中有冒号),并且还需要在BEGIN和END之间使用:=。如果我去掉这些东西,我仍然会觉得表达是错误的type@Aleksej:a对,谢谢。顺便说一句:“分号”是代码>这个:
是一个“冒号”@JanisOzolins:这是我这边的一个错误。Aleksej是对的。:
在WHEN
条件下无效。@没有名称的\u horse\u-触发器会编译,但在经度
或纬度
字段更新时不起作用。触发器“USER.FILL_COORDINATES”无效,重新启动失败-validation@JanisOzolins创建触发器时是否看到“使用编译警告创建的触发器”?创建触发器后,显示错误
会给您带来什么?这是Oracle SQL语法吗?此触发器返回:bind变量的使用无效(由于WHEN子句中有冒号),并且还需要在BEGIN和END之间使用:=。如果我去掉这些东西,我仍然会觉得表达是错误的type@Aleksej:a对,谢谢。顺便说一句:“分号”是代码>这个:
是一个“冒号”@JanisOzolins:这是我这边的一个错误。Aleksej是对的。:
在WHEN
条件下无效。@没有名称的\u horse\u-触发器会编译,但在经度
或纬度
字段更新时不起作用。触发器“USER.FILL_COORDINATES”无效,重新启动失败-validation@JanisOzolins创建触发器时是否看到“使用编译警告创建的触发器”?创建触发器后,显示错误
会给您带来什么?