Является ли это правильным синтаксисом для хранимой процедуры mysql 5.x?
DELIMITER $$
CREATE PROCEDURE GetNearbyPhotogsByMapCenter(
lat1 decimal (7,3),
long1 decimal (7,3),
range numeric (15)
)
BEGIN
DECLARE rangeFactor decimal (7,6);
SET rangeFactor = 0.014457;
select * from (
SELECT B.cb_plug_lat, B.cb_plug_lng, B.cb_photostudio , B.city, B.State,
B.country, B.website, B.cb_basesserved, B.phone,
B.cb_isrc,B.cb_isavailableforsessions
FROM jos_comprofiler AS B, jos_users as JU
WHERE
B.cb_plug_lat BETWEEN lat1-(range*rangeFactor) AND
lat1+(range*rangeFactor)
AND B.cb_plug_lng BETWEEN long1-(range*rangeFactor) AND
long1+(range*rangeFactor)
AND GetDistance(lat1,long1,B.cb_plug_lat,B.cb_plug_lng) <= range
AND B.approved = 1
AND B.confirmed = 1
AND B.user_id = JU.id
ORDER BY B.cb_isrc desc) as D
WHERE D.cb_isavailableforsessions = 'Yes' or D.cb_isavailableforsessions is null;
END
$$
Я пытаюсь загрузить эту хранимую процедуру в мою базу данных MySQL, используя вкладку SQL на моем phpMyAdmin. Я установил делиметр в нижней части этой вкладки на $$ в соответствии с этим сообщением: Как написать SP в phpMyAdmin (MySQL)?
Поэтому мне просто интересно, почему я продолжаю получать эту ошибку:
#1064 - 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 'lat1 decimal (7,3), long1 decimal (7,3), range numeric (15) BEGIN ' at line 2
Не помещайте идентификатор процедуры в кавычки. Кроме того, range
является зарезервированным словом MySQL (начиная с 5.1), поэтому вам нужно либо поместить его в backticks (`) каждый раз, когда вы его используете, либо изменить его на незарезервированное слово.
Ниже приведена версия, зарегистрировавшая процедуру на моем сервере MySQL 5.2.
CREATE PROCEDURE GetNearbyPhotogsByMapCenter(
lat1 decimal (7,3),
long1 decimal (7,3),
`range` numeric (15)
)
BEGIN
DECLARE rangeFactor decimal (7,6);
SET rangeFactor = 0.014457;
select * from (
SELECT B.cb_plug_lat, B.cb_plug_lng, B.cb_photostudio , B.city, B.State,
B.country, B.website, B.cb_basesserved, B.phone,
B.cb_isrc,B.cb_isavailableforsessions
FROM jos_comprofiler AS B, jos_users as JU
WHERE
B.cb_plug_lat BETWEEN lat1-(`range`*rangeFactor) AND
lat1+(`range`*rangeFactor)
AND B.cb_plug_lng BETWEEN long1-(`range`*rangeFactor) AND
long1+(`range`*rangeFactor)
AND GetDistance(lat1,long1,B.cb_plug_lat,B.cb_plug_lng) <= `range`
AND B.approved = 1
AND B.confirmed = 1
AND B.user_id = JU.id
ORDER BY B.cb_isrc desc) as D
WHERE D.cb_isavailableforsessions = 'Yes' or D.cb_isavailableforsessions is null;
END
$$
...near 'range numeric(15)
ошибкой...near 'range numeric(15)
. RANGE - это зарезервированное слово MySQL.