1

不确定我在这里是否正确。

我在 MySQL 中有一个存储过程,它限制了这样的结果:

...
ORDER BY param_sort1, param_sort2
LIMIT param_start, param_end
;

*param_start* 和 *param_end* 都作为整数传入,如下所示:

...
IN `param_start` INT, 
IN `param_end` INT
...

虽然这在我使用最新 MySQL 的开发服务器上运行,但生产服务器仍在运行 MySQL 5.0.88 并在 LIMIT 子句上引发语法错误。如果我将其注释掉,它可以正常工作。

我对 MySQL 还很陌生,对于如何在旧版本的 MySQL 中正确执行此操作完全一无所知。

问题:
任何提示如何使它工作?

谢谢!

4

2 回答 2

2

在 MySQL 5.0 中,您不能将变量或参数用于 LIMIT 参数。MySQL 5.5 支持此功能。

作为一种解决方法 - 构造一个查询字符串并使用准备好的语句执行它。


像这样的东西(编辑)

CREATE PROCEDURE procedure(IN param_start INT, IN param_end INT)
BEGIN
  SET @param_start = param_start;
  SET @param_end = param_end;
  SET @sql = CONCAT('SELECT * FROM table LIMIT ?, ?');
  PREPARE stmt FROM @sql;
  EXECUTE stmt USING @param_start, @param_end;
  DEALLOCATE PREPARE stmt;
END
于 2012-07-06T07:19:56.450 回答
0

这是一个适用于 v5.1.36 的示例查询

*从customer限制 2000、1000 中选择 *;*

我认为您应该升级到最新的 MySQL 稳定版本并尝试,因为 v5.0.88 不再稳定并且 MySQL 已经停止支持 v5.0 树,升级到 v5.5 树,看看它是否已修复

这些错误报告可能是相关的 http://bugs.mysql.com/bug.php?id=50510 http://bugs.mysql.com/bug.php?id=46217

于 2012-07-06T07:21:56.103 回答