Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 是否触发仅在插入/更新两个其他字段(纬度和经度)时更新一个字段(位置)?_Sql_Oracle_Triggers - Fatal编程技术网

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创建触发器时是否看到“使用编译警告创建的触发器”?创建触发器后,
显示错误
会给您带来什么?