7

変数なしで次のクエリを作成すると、すべてがうまく機能するストアドプロシージャがあります。

 CREATE PROCEDURE `some_proc` ()
 BEGIN
 SELECT blabla FROM  mytable ORDER BY id LIMIT 3,1
 .....

しかし、LIMIT式の開始番号として変数を使用すると、エラーが発生します。

 CREATE PROCEDURE `some_proc` ()
 BEGIN
 DECLARE start INT;
 SET start = 3;
 SELECT blabla FROM  mytable ORDER BY id LIMIT start,1
 .....

ストアドプロシージャ内のLIMIT式で変数を使用する方法はありますか?

4

2 に答える 2

18

変数を直接使用することはできません。私が見た素晴らしい回避策は -

CREATE PROCEDURE `some_proc` (
IN _START INTEGER, 
IN _LIMIT INTEGER 
)
BEGIN 
PREPARE STMT FROM 
" SELECT * FROM products LIMIT ?,? "; 
SET @START = _START; 
SET @LIMIT = _LIMIT; 
EXECUTE STMT USING @START, @LIMIT;
DEALLOCATE PREPARE STMT;
END $$ 

別の検索でhttp://bugs.mysql.com/bug.php?id=8094が返されました。

また、準備されたステートメントの詳細については、マニュアルを参照してください。

于 2012-07-05T11:26:00.307 に答える
7

MySQL 5.5 のSELECT ステートメントで実行できます。

ドキュメントから:

ストアド プログラム内では、整数値のルーチン パラメータまたはローカル変数を使用して LIMIT パラメータを指定できます (MySQL 5.5.6 以降)。

于 2012-07-05T12:52:08.460 に答える