希望这是一个很好的快速之一来解决。

下面是我的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。

感谢。

有帮助吗?

解决方案

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;

其他提示

直接链接到马克绿蓝的评论

诱骗为此: 获得注释的表ID和创建网址的锚。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top