Mysql存储过程限制查询

时间:2012-06-22 14:04:09

标签: mysql stored-procedures

我只想限制存储内的参数查询,但是在LIMIT字段中出现错误:

DELIMITER //
DROP FUNCTION IF EXISTS test//
CREATE PROCEDURE test(lim INT)
  BEGIN
    SELECT * FROM logs LIMIT 0,lim; 
  END //
DELIMITER ;

我想念的是什么?

1 个答案:

答案 0 :(得分: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)