ストアド内のパラメーターでクエリを制限したいだけですが、LIMIT フィールドでエラーが発生します。
DELIMITER //
DROP FUNCTION IF EXISTS test//
CREATE PROCEDURE test(lim INT)
BEGIN
SELECT * FROM logs LIMIT 0,lim;
END //
DELIMITER ;
何が恋しい?
ストアド内のパラメーターでクエリを制限したいだけですが、LIMIT フィールドでエラーが発生します。
DELIMITER //
DROP FUNCTION IF EXISTS test//
CREATE PROCEDURE test(lim INT)
BEGIN
SELECT * FROM logs LIMIT 0,lim;
END //
DELIMITER ;
何が恋しい?
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)