我正在创建一个分页类,并且需要为LIMIT子句向我的MySQL存储过程传递两个参数。
我将它们作为in传入,并尝试如下所示
SELECT *
FROM
`MyTable`
LIMIT
MyFirstParamInt, MySecondParamInt但是,当我尝试保存存储过程时,它会给我一个错误。有没有办法解决我错过的这个问题?或者我必须评估整个查询并执行它?
发布于 2010-05-20 23:39:57
在5.5.6之前,不能在MySQL存储过程中参数化LIMIT。您需要动态构建查询并执行它。
在5.5.6及更高版本中,只要LIMIT和OFFSET为INTEGER,您就可以将存储的procs参数作为参数传递给它们。
发布于 2013-01-25 00:38:18
我刚刚找到了一个可能会有帮助的解决方案。在存储过程中使用声明的变量,并将它们设置为参数
例如:
CREATE PROCEDURE MyProcedure(
IN paramFrom INT,
IN paramTo INT
)
BEGIN
DECLARE valFrom INT;
DECLARE valTo INT;
SET valFrom = paramFrom;
SET valTo = paramTo;
SELECT * FROM myTable LIMIT valFrom, valTo;
END发布于 2010-05-20 23:41:42
来自http://dev.mysql.com/doc/refman/5.1/en/select.html
LIMIT子句可用于限制SELECT语句返回的行数。LIMIT接受一个或两个数值参数,这两个参数必须都是非负整数常量(使用预准备语句时除外)。
下面是准备好的语句示例,可能会对您有所帮助:
SET @skip=1;
SET @rows=5;
PREPARE STMT FROM 'SELECT * FROM table LIMIT ?, ?';
EXECUTE STMT USING @skip, @rows;https://stackoverflow.com/questions/2875238
复制相似问题