Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Error con procedimiento almacenado

Estas en el tema de Error con procedimiento almacenado en el foro de Mysql en Foros del Web. Tengo este procedimiento almacenado, y cuando utilizo este procedimiento en mi servidor local con MySQL 5.5.24-community funciona correctamente, pero intento ejecutar este procedimiento en un ...
  #1 (permalink)  
Antiguo 11/08/2012, 10:44
 
Fecha de Ingreso: abril-2010
Ubicación: Chile
Mensajes: 76
Antigüedad: 14 años
Puntos: 3
Error con procedimiento almacenado

Tengo este procedimiento almacenado, y cuando utilizo este procedimiento en mi servidor local con MySQL 5.5.24-community funciona correctamente, pero intento ejecutar este procedimiento en un hosting con MySQL 5.1.63-cll, no funciona y aparece el siguiente error

Código:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'max; END' at line 4
El procedimiento es este.

Código MySQL:
Ver original
  1. delimiter //
  2. CREATE PROCEDURE buscar_permisos(IN per int, IN max int)
  3.     SELECT id. user, pass, permiso FROM usuarios
  4.     WHERE persimos=per ORDER BY id limit max;
  5. //
  6. delimiter ;
  #2 (permalink)  
Antiguo 11/08/2012, 11:06
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Error con procedimiento almacenado

Tienes :
1) Un espacio vacío entre id y user.
2) Estás usando una palabra reservada como nombre de variable (max).
3) Estás usando un comando y palabra reservada como nombre de columna (user).

Modifica eso, verifica y vuelve a probar.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 11/08/2012, 18:31
 
Fecha de Ingreso: abril-2010
Ubicación: Chile
Mensajes: 76
Antigüedad: 14 años
Puntos: 3
Respuesta: Error con procedimiento almacenado

Lo cambie por
Código MySQL:
Ver original
  1. delimiter //
  2. CREATE PROCEDURE buscar_permisos(IN permis INT, IN limite INT)
  3. SELECT id, usuario, contrasenia, permisos FROM usuarios
  4. WHERE permisos=permis ORDER BY id LIMIT limite;
  5. //
  6. delimiter ;

y aun así me arroja el error:

Código:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'limite; END' at line 4
Y si el limite lo establezco con un valor numerico en vez de una variable, funciona correctamente, es decir, si coloco

Código MySQL:
Ver original
  1. delimiter //
  2. CREATE PROCEDURE buscar_permisos(IN permis INT)
  3. SELECT id, usuario, contrasenia, permisos FROM usuarios
  4. WHERE permisos=permis ORDER BY id LIMIT 10;
  5. //
  6. delimiter ;

Me lo toma correctamente
  #4 (permalink)  
Antiguo 11/08/2012, 18:43
 
Fecha de Ingreso: abril-2010
Ubicación: Chile
Mensajes: 76
Antigüedad: 14 años
Puntos: 3
Respuesta: Error con procedimiento almacenado

Me respondo a mi mismo y a cualquier persona que tenga este problema

La clausula LIMIT en versiones de MySQL anteriores a 5.5.6, no acepta otro tipo de datos que no sean constantes de tipo entero. Recién en la versión 5.5.6 se pueden usar variables y otras cosas.

Cita:
Noted in 5.5.6, 6.0.14 changelogs.

Within stored programs, LIMIT clauses now accept integer-valued
routine parameters or local variables as parameters.
Pero existe una solución para versiones anteriores a esta

Código SQL:
Ver original
  1. DROP PROCEDURE IF EXISTS get_product_range $$
  2. CREATE PROCEDURE get_product_range (
  3. IN _START INTEGER,
  4. IN _LIMIT INTEGER
  5. )
  6. BEGIN
  7. PREPARE STMT FROM
  8. " SELECT *
  9. FROM products LIMIT ?,? ";
  10. SET @START = _START;
  11. SET @LIMIT = _LIMIT;
  12. EXECUTE STMT USING @START, @LIMIT; /* Known bug in mySQL5 - exists as feature req. */
  13. END $$
  #5 (permalink)  
Antiguo 12/08/2012, 07:54
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Error con procedimiento almacenado

No te mencioné esa opción porque quería ver si el error subsistía luego de los cambios. Como el motor 5.5.6 está muy difundido entre desarrolladores, si continuabas con problemas te iba a pedir verificar la versión.
Me alegro que lo hayas descubierto sin ayuda. Eso habla de que eres una persona proactiva.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: procedimiento, select, sql, almacenar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:21.