Разочаровывающая ошибка MySQL CREATE PROCEDURE - PullRequest
1 голос
/ 03 декабря 2009

Надеюсь, это очень быстро, чтобы решить.

Вот мой файл .sql:

USE my_db;

DELIMITER $$
CREATE PROCEDURE searchLocation(IN argQuery VARCHAR(32), IN argLimit INT)
BEGIN
  SELECT DISTINCT `suburb`, `postcode`
  FROM `location`
  WHERE `suburb` LIKE '%argQuery%'
  OR `postcode` LIKE 'argQuery%'
  LIMIT argLimit
  ;
END
$$
DELIMITER ;

Это вывод:

ERROR 1064 (42000) at line 4: 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 'argLimit
  ;
END' at line 8

Так что, похоже, мой параметр argLimit не нравится, но я не могу понять, почему Я, должно быть, делаю что-то глупое.

Я использую MySQL 5.0.51.

Спасибо.

Ответы [ 2 ]

4 голосов
/ 03 декабря 2009

LIMIT должен быть константой и не может быть параметризован внутри процедуры или функции в MySQL. Однако можно обойти эту проблему, используя синтаксис PREPARE ... EXECUTE ... USING.

Это может выглядеть примерно так:

...
SET @qry= argQuery;
SET @lmt= argLimit;

PREPARE stmt FROM 'SELECT ... LIKE ? ... LIKE ? ... LIMIT ?';
EXECUTE stmt USING @qry, @qry, @lmt;
DEALLOCATE PREPARE stmt;
1 голос
/ 04 июля 2011

Прямая ссылка на комментарии Марка Грю .

Хитрость, чтобы сделать это : Получите идентификатор таблицы комментария и создайте привязку в URL.

...