0

ストアド内のパラメーターでクエリを制限したいだけですが、LIMIT フィールドでエラーが発生します。

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

何が恋しい?

4

1 に答える 1

1

MySQL LIMIT 句にはいくつかの制限があります。既知のbug id=11918こちらを参照してください。

これは、ストアド ルーチンに固有のものではありません。
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)
于 2012-06-22T15:02:56.413 に答える