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

标签 mysql variables stored-procedures limit

我有一个存储过程,如果我在没有变量的情况下编写以下查询,所有:工作正常

 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 表达式中使用变量?

最佳答案

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

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 中阅读更多关于预准备语句的信息.

关于mysql - 存储过程,在 LIMIT 表达式中使用变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11342961/

相关文章:

java - 发送 POST 到 HTTPS - 逻辑问题

java - MySql 存储过程数字增量器

java - 所有业务逻辑都在存储过程中

mysql - 无论如何,是否可以在 MySql Workbench 中从数据库图表创建 sql 语句

javascript - 用javascript中的值替换函数中的变量

php - Osticket:如何使用 "OR"约束过滤票证

php - Codeigniter:语言文件中的变量/配置项

java - Android:带有变量的 ShowDialog

mysql - 连接 3 个表时 SQL 按 2 个日期列获取订单

php - mysqli_query() 期望参数 1 为 mysqli,第 46 行 ~\index.php 中给出的资源