MySQL CREATE FUNCTION ломается на END IF
Я пытаюсь создать функцию для расчета расстояния между двумя точками широты и долготы; Тем не менее, CREATE FUNCTION ломает на END IF;
часть тела функции (подтверждается удалением IF/ELSE/END
блок).
Есть идеи? Я хотел бы сохранить разницу M / KM, чтобы избежать необходимости добавлять вычисления в приложение.
DELIMITER $$
CREATE FUNCTION HAVERSINE
(
from_latitude DECIMAL(30, 15),
from_longitude DECIMAL(30, 15),
to_latitude DECIMAL(30, 15),
to_longitude DECIMAL(30, 15),
unit VARCHAR(20)
)
RETURNS DECIMAL(30, 15)
DETERMINISTIC
BEGIN
DECLARE radius DECIMAL(30, 5);
DECLARE distance DECIMAL(30, 15);
IF(unit = 'MILES') THEN SET radius = '3959';
ELSE IF(unit = 'KILOMETRES' OR unit = 'KM') THEN SET radius = '6371.3929';
ELSE SET radius = '3959';
END IF;
SET distance = (
radius *
ACOS(
COS(RADIANS(from_latitude)) *
COS(RADIANS(to_latitude)) *
COS(RADIANS(to_longitude) - RADIANS(from_longitude)) +
SIN(RADIANS(from_latitude)) *
SIN(RADIANS(to_latitide))
)
);
RETURN distance;
END
2 ответа
Решение
Я только заметил пробелы между ELSE и IF. Виноват. Убрал те и все работает.
Вы, вероятно, забыли добавить разделитель в конце и переключиться обратно на стандартный разделитель:
Замените последнюю строку следующим кодом:
END$$
DELIMITER ;