首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将限制作为参数传递给MySQL存储过程

问将限制作为参数传递给MySQL存储过程
EN

Stack Overflow用户
提问于 2010-05-20 23:28:18
回答 8查看 29.9K关注 0票数 11

我正在创建一个分页类,并且需要为LIMIT子句向我的MySQL存储过程传递两个参数。

我将它们作为in传入,并尝试如下所示

代码语言:javascript
复制
SELECT *
FROM
`MyTable`
LIMIT
MyFirstParamInt, MySecondParamInt

但是,当我尝试保存存储过程时,它会给我一个错误。有没有办法解决我错过的这个问题?或者我必须评估整个查询并执行它?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-05-20 23:39:57

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

在5.5.6及更高版本中,只要LIMIT和OFFSET为INTEGER,您就可以将存储的procs参数作为参数传递给它们。

票数 16
EN

Stack Overflow用户

发布于 2013-01-25 00:38:18

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

例如:

代码语言:javascript
复制
 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
票数 16
EN

Stack Overflow用户

发布于 2010-05-20 23:41:42

来自http://dev.mysql.com/doc/refman/5.1/en/select.html

LIMIT子句可用于限制SELECT语句返回的行数。LIMIT接受一个或两个数值参数,这两个参数必须都是非负整数常量(使用预准备语句时除外)。

下面是准备好的语句示例,可能会对您有所帮助:

代码语言:javascript
复制
SET @skip=1;
SET @rows=5;

PREPARE STMT FROM 'SELECT * FROM table LIMIT ?, ?';
EXECUTE STMT USING @skip, @rows;
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2875238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档