2013-05-12 36 views
0

我想創建一個函數來計算兩個經緯度點之間的距離;但是,CREATE FUNCTION正在打破功能體的END IF;部分(通過刪除IF/ELSE/END塊進行確認)。MySQL CREATE FUNCTION打破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 

回答

0

我只注意到了ELSE和IF之間的空格。我的錯。刪除這些,它的作品。

0

你可能忘了在末尾添加分隔符,並切換回標準的分隔符:

替換爲以下代碼的最後一行:

END$$ 
DELIMITER ;