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 (что в лучшем случае плохой стиль и дает вам случайную строку каждый раз при худшем).

Другие вопросы по тегам