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 ;
Приведенный выше код должен, насколько я понимаю, быстро создать sp для получения событий рядом с заданным IP-адресом. Однако во время всех моих поисков я не нашел достаточной причины для того, чтобы он выбрасывал 1064 на РАЗДЕЛИТЕЛЬ (строка 1).
Даже если у меня ПРОСТО:
DELIMITER $$
SELECT * FROM iplocationdb_location;
$$
DELIMITER ;
По-прежнему запускается 1064. mySQL version 5.0.77.
ПРИМЕЧАНИЕ. У меня действительно есть пробел между разделителем и строкой-разделителем.
ПРИМЕЧАНИЕ 2. Я использую heidiSQL для запуска этого скрипта, что, как я понимаю, равносильно запуску его из командной строки.