2012-07-05 3 views
7

私は、変数せずに次のクエリを記述する場合はここでストアドプロシージャ、すべてがいる:私は開始番号のように変数を使用する場合、よくストアド・プロシージャは、LIMIT式で変数を使用して

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式で変数を使用する方法はありますか?

+0

[MySQLのSPROCにパラメータとしてLIMITを渡す]の可能な重複(http://stackoverflow.com/questions/2875238/passing-limit-as-parameters-to-mysql -sproc) – Pang

答えて

17

変数を直接使用することはできません。私が見てきた素敵な回避策がある - http://bugs.mysql.com/bug.php?id=8094 -

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 $$ 

別の検索がこれを返しました。

また、manualには準備済み明細の詳細が記載されています。

7

これは、MySQL 5.5 - SELECT statementで実行できます。

ドキュメントから:

Within stored programs, LIMIT parameters can be specified using integer-valued routine parameters or local variables as of MySQL 5.5.6.

関連する問題