2013-05-12 2 views
0

Я пытаюсь создать функцию для вычисления расстояний между двумя точками lat/lon; однако функция CREATE FUNCTION разбивается на часть тела функции END IF; (подтверждается удалением блока IF/ELSE/END).MySQL CREATE FUNCTION break on END IF

Любые идеи? Я хотел бы сохранить разницу 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 

ответ

0

Я просто заметил, пробелы между ELSE и IF. Виноват. Удалены те, и это работает.

0

Вы, наверное, забыл добавить разделитель в конце концов, и переключиться на стандартный разделитель:

Заменить последнюю строку со следующим кодом:

END$$ 
DELIMITER ;