2012-07-05 22 views
7

ben bir değişken olmadan aşağıdaki sorguyu yazarsanız olduğu bir saklı yordam, tüm adres: Ben başlangıç ​​sayısında gibi bir değişken kullanıyorsanız, iyiSaklı yordam, SINIR ifadesinde değişken kullanılarak

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

çalışıyor ancak ifadesini SINIRLAMAK, bir hata alıyorum:

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

saklı yordam içindeki SINIR ifadesinde bir değişkeni kullanmak için bir yolu var mı?

+0

[MySQL sproc için parametre olarak LIMIT geçen] olası yinelenen (http://stackoverflow.com/questions/2875238/passing-limit-as-parameters-to-mysql: belgelerine

-sproc) – Pang

cevap

17

Doğrudan bir değişken kullanamazsınız. Gördüğüm güzel çözüm budur - 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 $$ 

başka arama bu döndü.

Ayrıca hazırlanmış deyimler hakkında daha fazla bilgiyi manual numaralı telefondan okuyabilirsiniz.

7

Bunu MySQL 5.5 - SELECT statement'da yapabilirsiniz.

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

İlgili konular