MYSQL - 表未从过程更新
Posted
技术标签:
【中文标题】MYSQL - 表未从过程更新【英文标题】:MYSQL - table not updating from Procedure 【发布时间】:2018-11-05 02:02:17 【问题描述】:我想获取两个 GeoPoints 之间的距离(使用 LatLong),因为我从提供的解决方案中编写了 GETDISTANCE 函数 [mysql Function to calculate distance between two latitudes and longitudes.如果我独立调用函数,它就像魅力一样。
据我了解,我无法从 MySQL 中的函数返回 ResultSet
,所以我创建了过程并在过程中调用函数,如下所示:
DELIMITER $$
CREATE PROCEDURE GetNearByGeoPoints(IN Lat REAL, IN Longi REAL)
BEGIN
DECLARE v_max int;
DECLARE v_counter int unsigned default 0;
SET @v_max = (SELECT COUNT(*) FROM TransmitterPointsData);
START TRANSACTION;
WHILE v_counter < v_max
DO
SELECT @coverageID :=CoverageID, @tableLatitude := Latitude, @tableLongitude :=Longitude FROM TransmitterPointsData LIMIT v_counter,1;
SET @Dist= GETDISTANCE(Lat, Longi, tableLatitude, tableLongitude);
UPDATE TransmitterPointsData SET DynamicDistance = @Dist WHERE CoverageID= @coverageID;
set v_counter=v_counter+1;
END WHILE;
COMMIT;
SELECT * FROM TransmitterPointsData;
END $$
DELIMITER ;
我要做的是从用户那里获取一组 LatLong 参数,并将其与表中的每组 LatLong 进行比较。从函数获取输出后,我正在使用 coverageID 上的 where 条件更新 TransmitterPointsData 表。
这是我迄今为止的第一个 MySQL 查询,我遵循语法,但我不知道为什么我会在 DynammicDistance
列中获取所有 null
值。
提前致谢
【问题讨论】:
不应该是GETDISTANCE(Lat, Longi, @tableLatitude, @tableLongitude)
吗?我很惊讶该程序编译...
我也这样做了,但最后还是给了我空值
此时我最好的猜测是您对 GETDISTANCE 的输入值的计算是错误的。尝试添加一些调试信息(存储/打印与结果一起计算的输入)。
我尝试通过提供硬编码值从存储过程中调用 GETDISTANCE(10, 12, 12, 12) 之类的函数,但在 DynammicDistance 列中仍然为空。但是如果我独立调用函数 GETDISTANCE(10, 12, 12, 12) 我得到 138.11138916015625 作为输出。根据 mysql 查询,它应该更新 DynamicDistance 列中的 138.111*** 值
【参考方案1】:
尝试用这个替换while循环:
UPDATE TransmitterPointsData
SET DynamicDistance = GETDISTANCE(Lat, Longi, Latitude, Longitude)
短得多,并且您可以通过限制 + 偏移避免潜在的行选择问题(这充其量是一种糟糕的风格,并且每次都会给您一个随机的行,更糟糕的是)。
【讨论】:
以上是关于MYSQL - 表未从过程更新的主要内容,如果未能解决你的问题,请参考以下文章