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 ;
根據我的理解,上面的代碼應該創建一個快速的小sp來獲取給定ip地址附近的事件。然而,通過我所有的搜索,我還沒有找到一個令人滿意的理由,因爲它在DELIMITER(第1行)上投擲了1064個。
即使我剛纔:mySQL DELIMITER投擲1064
DELIMITER $$
SELECT * FROM iplocationdb_location;
$$
DELIMITER ;
它仍然火災1064 MySQL版本5.0.77。
注意:我在DELIMITER和分隔字符串之間有空格。 注意2:我使用heidiSQL來運行這個腳本,根據我的理解,這應該等同於從命令行運行它。
我認爲最後一行應該是'DELIMITER; $$' – Vijay 2011-05-14 05:18:57
更新:我將sql文件傳遞給其他人,並且他創建了SP。奇怪的權利? – meteorainer 2011-05-14 19:47:20
另一個更新:顯然有權限的問題。不知道它爲什麼會出現語法錯誤,但現在看起來很好。 – meteorainer 2011-05-14 20:39:16