2011-05-14 3 views
3
DELIMITER $$ 
DROP PROCEDURE IF EXISTS eventsNearMe$$ 

CREATE PROCEDURE eventsNearMe(IN inIP VARCHAR(16)) 
BEGIN 

DECLARE ipLAT FLOAT; 
DECLARE ipLONG FLOAT; 

SELECT iplocationdb_location.latitude, iplocationdb_location.longitude 
INTO ipLAT, ipLONG 
FROM `iplocationdb_ip` 
LEFT JOIN iplocationdb_location ON iplocationdb_location.id=iplocationdb_ip.location_id 
WHERE iplocationdb_ip.prefix=(INET_ATON(inIP)>>24) 
AND INET_ATON(inIP) BETWEEN iplocationdb_ip.start_ip AND iplocationdb_ip.end_ip LIMIT 1; 

CREATE TEMPORARY TABLE tempEVENTS 
SELECT `eid`,(((acos(sin((ipLAT*pi()/180)) * sin((`lat`*pi()/180))+cos((ipLAT*pi()/180)) * cos((`lat`*pi()/180)) * cos(((ipLONG- `long`)*pi()/180))))*180/pi())*60*1.1515) as d FROM `mke_events` HAVING `d` <= 10 LIMIT 1; 

SELECT * FROM tempEVENTS; 

DROP TEMPORARY TABLE tempEVENTS; 
END 
$$ 
DELIMITER ; 

위의 코드는 제 생각에 주어진 IP 주소 근처에서 이벤트를 얻기 위해 빠른 sp를 작성해야합니다. 그러나 모든 검색을 통해 DELIMITER (줄 1)에 1064를 던지는 만족스러운 이유를 찾지 못했습니다.
내가 그냥 경우에도 :mySQL DELIMITER throwing 1064

DELIMITER $$ 
SELECT * FROM iplocationdb_location; 
$$ 
DELIMITER ; 

아직 1064 MySQL 버전 5.0.77을 발생합니다.

참고 : DELIMITER와 구분 문자열 사이에 공백이 있습니다. NOTE2 : heidiSQL을 사용하여이 스크립트를 실행하고 있습니다.이 스크립트는 필자의 이해에 따라 명령 줄에서 실행해야합니다.

+0

내가 마지막 줄은'DELIMITER해야한다고 생각; $$' – Vijay

+0

업데이트 : SQL 파일을 다른 사람에게 넘겨주고 SP를 만들었습니다. 이상한가? – meteorainer

+0

다른 업데이트 : 권한에 문제가있는 것 같습니다. 왜 그것이 구문 오류로 끝나는지 확신 할 수 없지만 지금은 괜찮아 보입니다. – meteorainer

답변

1

또한 DELIMITER 행에 공백 문자 (탭 문자)가 추가되어 HeidiSQL이 아닌 명령 행 mysql에서 DELIMITER 관련 구문 오류가 가짜였습니다. 예를 들면 :

후행 공백을 고정 제거
DELIMITER ;<TAB><TAB> 

(공백에 대한 의견이 저를 밀고, 감사합니다.)