【问题标题】:Stored procedure, using variable in LIMIT expression存储过程,在 LIMIT 表达式中使用变量
【发布时间】:2012-07-05 11:00:13
【问题描述】:

我有一个存储过程,如果我在其中编写以下不带变量的查询,all: 运行良好

 CREATE PROCEDURE `some_proc` ()
 BEGIN
 SELECT blabla FROM  mytable ORDER BY id LIMIT 3,1
 .....

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

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

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

【问题讨论】:

标签: mysql variables stored-procedures limit


【解决方案1】:

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

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 $$ 

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

您还可以在manual 中阅读有关准备好的语句的更多信息。

【讨论】:

    【解决方案2】:

    您可以在 MySQL 5.5 - SELECT statement 中做到这一点。

    来自文档:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多