令人沮丧的MySQL CREATE PROCEDURE错误

时间:2009-12-03 03:19:20

标签: sql mysql stored-procedures mysql-error-1064

希望这是一个很快解决的问题。

这是我的.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 个答案:

答案 0 :(得分:4)

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 :(得分:1)

Marc Grue's comments的直接链接。

Trick to do this: 获取评论的表格ID并在URL中创建一个锚点。