MYSQL - таблица не обновляется из процедуры
Я хочу получить расстояние между двумя GeoPoints (используя LatLong), для этого я написал функцию GETDISTANCE из предоставленного решения [ MySQL Function для вычисления расстояния между двумя широтами и долготами. Если я вызываю функцию независимо, она работает как шарм. Согласно моему пониманию, я не могу вернуться ResultSet
Из функции в MySQL, поэтому я создал процедуру и вызвал функцию внутри процедуры следующим образом:
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 из таблицы. И после получения выходных данных из функции я обновляю таблицу TransmitterPointsData, где условие для coverID.
Это мой первый запрос MySQL, пока я следовал синтаксису, но я не знаю, почему я получаю все null
значения в DynammicDistance
Колонна.
Заранее спасибо
1 ответ
Попробуйте заменить цикл while следующим образом:
UPDATE TransmitterPointsData
SET DynamicDistance = GETDISTANCE(Lat, Longi, Latitude, Longitude)
Гораздо короче, и вы избежите потенциальных проблем с выбором строки через limit + offset (что в лучшем случае плохой стиль и дает вам случайную строку каждый раз при худшем).