Mysql存储过程限制查询
Posted
技术标签:
【中文标题】Mysql存储过程限制查询【英文标题】:Mysql stored procedure limit on query 【发布时间】:2012-06-24 20:16:29 【问题描述】:我只想通过存储中的参数限制查询,但在 LIMIT 字段中出现错误:
DELIMITER //
DROP FUNCTION IF EXISTS test//
CREATE PROCEDURE test(lim INT)
BEGIN
SELECT * FROM logs LIMIT 0,lim;
END //
DELIMITER ;
我想念什么?
【问题讨论】:
它对我有用。你遇到了什么错误? 我得到:#1064 - 您的 SQL 语法有错误;检查与您的 mysql 服务器版本相对应的手册,以在 'lim; 附近使用正确的语法; END'在第 3 行 【参考方案1】:MySQL LIMIT 子句有一些限制。请参阅已知的bug id=11918
here。
这并非特定于存储例程。LIMIT 不允许在任何上下文中使用变量。它的参数必须是整数常量。
一种解决方法是在存储过程中使用准备好的语句。
示例:
mysql> DROP PROCEDURE IF EXISTS names_proc;
Query OK, 0 rows affected (0.00 sec)
mysql> DELIMITER //
mysql> CREATE PROCEDURE names_proc( lim INT )
-> BEGIN
-> PREPARE STMT FROM 'SELECT * FROM names LIMIT 0, ?';
-> EXECUTE STMT USING @lim;
-> END;
-> //
Query OK, 0 rows affected (0.00 sec)
mysql> DELIMITER ;
mysql> CALL names_proc( 3 );
+------+----------+
| id | name |
+------+----------+
| 1 | jimjoe |
| 2 | jimddjoe |
| 3 | jim |
+------+----------+
3 rows in set (0.00 sec)
Query OK, 0 rows affected (0.01 sec)
【讨论】:
以上是关于Mysql存储过程限制查询的主要内容,如果未能解决你的问题,请参考以下文章