2012-07-05 12 views
7

Tengo un procedimiento almacenado en el que si escribo la siguiente consulta sin una variable, todo: funciona bienprocedimiento almacenado, mediante la variable en la expresión LÍMITE

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

pero, si uso una variable como número de inicio en limitar la expresión, me sale un error:

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

¿hay una manera de utilizar una variable en la expresión de límite del interior del procedimiento almacenado?

+0

posible duplicado de [pasando LIMIT como parámetros para MySQL sproc] (http://stackoverflow.com/questions/2875238/passing-limit-as-parameters-to-mysql -sproc) – Pang

Respuesta

17

No puede usar una variable directamente. Una buena solución que he visto es -

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

Otra búsqueda esto - http://bugs.mysql.com/bug.php?id=8094.

También puede leer más sobre declaraciones preparadas en el manual.

7

Puede hacerlo en MySQL 5.5 - SELECT statement.

De la documentación:

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

Cuestiones relacionadas