2012-07-05 15 views
7

ho una procedura immagazzinata in cui se scrivo la seguente query senza una variabile, tutti: funziona benestored procedure, utilizzando variabile nell'espressione LIMIT

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

ma, se uso una variabile come numero di partenza in Espressione LIMIT, viene visualizzato un messaggio di errore:

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

Esiste un modo per utilizzare una variabile nell'espressione LIMIT all'interno della stored procedure?

+0

possibile duplicato del [passando LIMIT come parametri a MySQL sproc] (http://stackoverflow.com/questions/2875238/passing-limit-as-parameters-to-mysql -sproc) – Pang

risposta

17

Non è possibile utilizzare direttamente una variabile. Una soluzione bello che ho visto è - restituito

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

Un'altra ricerca questo - http://bugs.mysql.com/bug.php?id=8094.

Inoltre, è possibile leggere ulteriori informazioni sulle istruzioni preparate nello manual.

7

È possibile farlo in MySQL 5.5 - SELECT statement.

Dalla documentazione:

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

Problemi correlati