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 ;
Другие вопросы по тегам