2014-10-06 3 views
0

MySQL 5.5.38에 처음 저장된 함수를 작성하려고하는데 성가신 구문 오류가 발생하지 않습니다. 이미 MySQL 문서를 확인했지만 문제가 무엇인지 알 수 없으며 오류 메시지는 You have an error in your SQL syntax; blah blah blah ... at line 1이라고합니다.스토어드 함수를 생성 할 때 구문 오류가 발생했습니다.

DELIMITER $$ 

CREATE FUNCTION distm (lat1 DOUBLE, lng1 DOUBLE, lat2 DOUBLE, lng2 DOUBLE) 
    RETURNS DOUBLE NO SQL DETERMINISTIC 
BEGIN 
    DECLARE radius DOUBLE; 
    SET radius = 6371008.771415059; 

    DECLARE x1, y1, x2, y2, dlat, dlng DOUBLE; 
    SET x1 = RADIANS(lng1); 
    SET y1 = RADIANS(lat1); 
    SET x2 = RADIANS(lng2); 
    SET y2 = RADIANS(lat2); 
    SET dlng = x2 - x1; 
    SET dlat = y2 - y1; 

    DECLARE dist DOUBLE; 
    SET dist = 2 * radius * ASIN(
     SQRT(
      POW(SIN(dlat/2), 2) 
      + COS(y1) * COS(y2) * POW(SIN(dlng/2), 2) 
     ) 
    ); 
    RETURN dist; 
END$$ 

DELIMITER ; 

편집 : 정확한 오류 메시지는 다음과 같다 :

여기에 코드입니다

SQL Error [1064] [42000]: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER $$ 

CREATE FUNCTION distm (lat1 DOUBLE, lng1 DOUBLE, lat2 DOUBLE, lng2' at line 1 
+0

당신이 distm을 존재하는 경우 'DROP 기능을 제거한 후 시도해 봤어 아니다? –

+0

더 이상 도움을 원한다면 정확한 오류를 게시하십시오. – Rahul

+0

@ Rahul 맞습니다. 정확한 오류 메시지를 추가했습니다. –

답변

0

DELIMITER $$ 전에 DROP 문을 제거 시도하고 다시 실행합니다.

또한 RETURNS DOUBLE NO SQL DETERMINISTIC을 아래로 변경하십시오. `, 공지 사항, 그것은 NO SQL DETERMINISTIC 오히려 NOT DETERMINISTIC

RETURNS DOUBLE NOT DETERMINISTIC 
+0

내 게시물의 코드에서 언급 한 내용을 삭제했습니다. 그러나 문서에 분명히 'NO SQL'이라고 표시되어 있습니다. https://dev.mysql.com/doc/refman/5.1/en/create-procedure.html –

+0

문서를 제대로 다시 확인하십시오. – Rahul

+0

@ 3k- 링크 된 문서에서 "** NO SQL **은 루틴에 SQL 문이 없음을 나타냅니다." 단지 조언 일 뿐이므로 SP *에는 SQL 문이 들어 있으므로 어쨌든이 특성을 사용하면 안됩니다. –