我不确定我在这里的正确位置。
我在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的旧版本中正确地执行此操作完全一无所知。
问题:
有什么小窍门能帮到你吗?
谢谢!
发布于 2012-07-06 07:19:56
在MySQL 5.0中,不能将变量或参数用于限制参数。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-06 07:21:56
这是一个用于5.1.36版本的示例查询
*从customer
限制2000,1000中选择*;*
我认为您应该升级到最新的MySQL稳定版本,并尝试因为v5.0.88不再稳定,并且MySQL已经停止了对v5.0树的支持,升级到v5.5树,看看它是否已经修复。
这些bug报告可能是相关的http://bugs.mysql.com/bug.php?id=50510 http://bugs.mysql.com/bug.php?id=46217。
https://stackoverflow.com/questions/11357431
复制相似问题