MYSQL - таблица не обновляется из процедуры - PullRequest
0 голосов
/ 05 ноября 2018

Я хочу получить расстояние между двумя 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 Ответ

0 голосов
/ 05 ноября 2018

Попробуйте заменить цикл while следующим образом:

UPDATE TransmitterPointsData
SET DynamicDistance = GETDISTANCE(Lat, Longi, Latitude, Longitude)

Гораздо короче, и вы избежите потенциальных проблем с выбором строки с помощью лимита + смещения (в лучшем случае это плохой стиль, а при худшем - случайная строка).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...