将LIMIT作为参数传递给MySQL sproc

Kyl*_*yle 11 mysql stored-procedures limit-clause

我正在创建一个分页类,需要将两个参数传递给我的LIMIT子句的MySQL存储过程.

我将它们作为INT传递并尝试这样的事情

SELECT *
FROM
`MyTable`
LIMIT
MyFirstParamInt, MySecondParamInt
Run Code Online (Sandbox Code Playgroud)

当我尝试保存sproc时,它给了我一个错误.有没有办法做到这一点,我只是错过了?或者我将不得不评估整个查询并执行它?

Qua*_*noi 14

在5.5.6之前,LIMIT无法在MySQL存储过程中进行参数化.您需要动态构建查询并执行它.

在5.5.6及以上版本,你可以通过存储的特效参数,参数LIMITOFFSET,只要他们INTEGER.

  • @Bergkamp:不,应该是downvoted. (2认同)

小智 11

我刚刚找到了一个可能有用的解决方案.在存储过程中使用声明的变量并将它们设置为您的参数

例如.

 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
Run Code Online (Sandbox Code Playgroud)


k.m*_*k.m 10

来自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;
Run Code Online (Sandbox Code Playgroud)