存储过程,在LIMIT表达式中使用变量

ოთო*_*აძე 7 mysql variables stored-procedures limit

我有一个存储过程,如果我在没有变量的情况下编写以下查询,则all:运行良好

 CREATE PROCEDURE `some_proc` ()
 BEGIN
 SELECT blabla FROM  mytable ORDER BY id LIMIT 3,1
 .....
Run Code Online (Sandbox Code Playgroud)

但是,如果我在LIMIT表达式中使用变量作为起始编号,我会收到错误:

 CREATE PROCEDURE `some_proc` ()
 BEGIN
 DECLARE start INT;
 SET start = 3;
 SELECT blabla FROM  mytable ORDER BY id LIMIT start,1
 .....
Run Code Online (Sandbox Code Playgroud)

有没有办法在存储过程内的LIMIT表达式中使用变量?

FSP*_*FSP 18

您不能直接使用变量.我见过的一个很好的解决方法是 -

CREATE PROCEDURE `some_proc` (
IN _START INTEGER, 
IN _LIMIT INTEGER 
)
BEGIN 
PREPARE STMT FROM 
" SELECT * FROM products LIMIT ?,? "; 
SET @START = _START; 
SET @LIMIT = _LIMIT; 
EXECUTE STMT USING @START, @LIMIT;
DEALLOCATE PREPARE STMT;
END $$ 
Run Code Online (Sandbox Code Playgroud)

另一个搜索返回了这个 - http://bugs.mysql.com/bug.php?id=8094.

您还可以阅读手册中有关预准备语句的更多信息.


Dev*_*art 7

您可以在MySQL 5.5 - SELECT语句中执行此操作.

从文档:

在存储的程序中,LIMIT参数可以使用整数值例程参数或MySQL 5.5.6中的局部变量来指定.