【问题标题】:Mysql stored procedure limit on queryMysql存储过程限制查询
【发布时间】: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 行

标签: mysql stored-procedures


【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-16
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 2010-11-12
    • 2013-10-10
    相关资源
    最近更新 更多