我有一个存储过程,如果我编写以下没有变量的查询,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 表达式中使用变量?
不能直接使用变量。我看到的一个很好的解决方法是 -
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。
您还可以在手册中阅读有关预准备语句的更多信息。
你可以在
MySQL 5.5 - SELECT语句中做到这一点。
从文档中:
在存储程序中,可以使用以下命令指定 LIMIT 参数 MySQL 的整数值例程参数或局部变量 5.5.6.