Правильный синтаксис для хранимой процедуры Mysql 5?

0

Является ли это правильным синтаксисом для хранимой процедуры 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
Теги:
phpmyadmin

1 ответ

0

Не помещайте идентификатор процедуры в кавычки. Кроме того, 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
$$
  • 0
    на самом деле должен обновить пост ... сделал это и все еще ту же ошибку.
  • 0
    Теперь вы, вероятно, получаете ...near 'range numeric(15) ошибкой ...near 'range numeric(15) . RANGE - это зарезервированное слово MySQL.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню