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

Error en store procedure

Estas en el tema de Error en store procedure en el foro de Mysql en Foros del Web. Buen dia. Resulta que necesito un procedimiento en el cual yo pueda establecer el inicio y el fin del limit y no me quiere dar. ...
  #1 (permalink)  
Antiguo 28/03/2010, 09:49
 
Fecha de Ingreso: mayo-2009
Mensajes: 177
Antigüedad: 14 años, 11 meses
Puntos: 1
Pregunta Error en store procedure

Buen dia.

Resulta que necesito un procedimiento en el cual yo pueda establecer el inicio y el fin del limit y no me quiere dar. tengo esto:

create procedure sp_grid(in tabla varchar(100),in inicio int(7),in limite int(7))
select * from tabla limit inicio,limite


Me marca error en las variables inicio y limite, ha de ser por lo que son cadenas y en esta parte el espera un valor numerico. Creo yo.

Sera que me pueden dar una mano y decirme como lo debo estruturar?

Gracias de antemano.
  #2 (permalink)  
Antiguo 28/03/2010, 09:52
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 en store procedure

El primer problema es que no puedes usar una variable para tomar el nombre de una tabla. Para eso tienes que crear una sentencia preparada en el SP, y eso no se hace con un SP de una sola línea...
En segundo lugar, ¿Y por qué, en lugar de VARCHAR, no pones INT en los parámetros de entrada?
__________________
¿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 28/03/2010, 10:01
 
Fecha de Ingreso: mayo-2009
Mensajes: 177
Antigüedad: 14 años, 11 meses
Puntos: 1
Respuesta: Error en store procedure

Bien.
no sabia que no podia tomar el valor de la tabla directamente de una variable,
si puedes darme algun ejemplo te lo agradeceria mucho. ya que necesito terminar un control que estoy haciendo y sin este procedimiento se me agrandaria mucho el trabajo.

Última edición por jucas1987; 28/03/2010 a las 10:06
  #4 (permalink)  
Antiguo 28/03/2010, 10:18
 
Fecha de Ingreso: mayo-2009
Mensajes: 177
Antigüedad: 14 años, 11 meses
Puntos: 1
Respuesta: Error en store procedure

Bueno la verdad es que el tiempo me apremia, he decidido quemar el nombre de la tabla en el procedimiento, pero igual el error persiste en el inicio y limite del limit, he cambiado mi procedimiento de la siguiente manera:

create procedure sp_grid_perfil(in inicio int(7), in limite int(7))
select * from tb_perfil limit inicio, limite

el error es marcado en las variables inicio y limite

Agredeceria si me diesen una mano con esto.
  #5 (permalink)  
Antiguo 28/03/2010, 10:40
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 en store procedure

Sigues teniendo el mismo problema: Para usar variables como parámetros de LIMIT debes usar sentencias preparadas, porque LIMIT no admite uso de variables.
Una de las razones parece ser evitar el ingreso de valores ilegales dentro del rango.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 28/03/2010, 10:42
 
Fecha de Ingreso: mayo-2009
Mensajes: 177
Antigüedad: 14 años, 11 meses
Puntos: 1
Respuesta: Error en store procedure

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Sigues teniendo el mismo problema: Para usar variables como parámetros de LIMIT debes usar sentencias preparadas, porque LIMIT no admite uso de variables.
Una de las razones parece ser evitar el ingreso de valores ilegales dentro del rango.
Bueno, entonces me pondre a investigar sobre las sentencias preparadas, pues la verdad no tengo ni idea, igual si me puedes dar una pagina donde pueda encontrar un buen ejemplo te lo agradeceria.
  #7 (permalink)  
Antiguo 28/03/2010, 10:46
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 en store procedure

Este sería el código (a cargar usando el MySQL Query Browser, por ejemplo):
Código MySQL:
Ver original
  1. DELIMITER $$
  2.  
  3. DROP PROCEDURE IF EXISTS `sp_grid_perfil` $$
  4. CREATE PROCEDURE `sp_grid_perfil`(in inicio int, in limite int)
  5.   PREPARE sent FROM 'SELECT * FROM uno LIMIT ?, ?';
  6.   IF inicio <limite THEN
  7.     SET @a = inicio;
  8.     SET @b = limite;
  9.   ELSE
  10.     SET @b = inicio;
  11.     SET @a = limite;
  12.   END IF;
  13.   EXECUTE sent USING @a, @b;
  14.   DEALLOCATE PREPARE sent;
  15. END$$
  16. DELIMITER ;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 28/03/2010, 10:51
 
Fecha de Ingreso: mayo-2009
Mensajes: 177
Antigüedad: 14 años, 11 meses
Puntos: 1
Respuesta: Error en store procedure

gnzsoloyo
No te imaginas cuanto te agradezco, el procedimiento que me haz pasado funciona a la perfeccion, igual me haz dado un nuevo tema de estudio, ya que la verdad no conocia las sentencias preparadas.

Gracias
  #9 (permalink)  
Antiguo 28/03/2010, 11:08
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 en store procedure

Me alegra que sirva.
Trata de modificarlo para agregarle el parámetro de nombre de tabla, a ver qué tal funciona. Yo no lo probé aún.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 28/03/2010, 12:58
 
Fecha de Ingreso: mayo-2009
Mensajes: 177
Antigüedad: 14 años, 11 meses
Puntos: 1
Respuesta: Error en store procedure

gnzsoloyo

he creado otro procedimiento que necesitaba con la misma estructura y no he tenido problema, pero de nada me ha servido por que a la hora de llamarle, me arroja un error en el signo de interrogacion, sera que me puedes decir a que se debe esto?
mira este es el procedimiento:

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_count`(in tabla varchar(15))
BEGIN
PREPARE sent FROM 'SELECT count(*) FROM ?';
set @a = tabla;
EXECUTE sent USING @a;
DEALLOCATE PREPARE sent;
END;


y esta la forma en la que lo llamo:

CALL sp_count('tb_perfil');
  #11 (permalink)  
Antiguo 30/03/2010, 20:29
 
Fecha de Ingreso: mayo-2009
Mensajes: 177
Antigüedad: 14 años, 11 meses
Puntos: 1
Respuesta: Error en store procedure

Bueno. despues intentar un rato, lo he arreglado. Asi quedo mi procedure con sentencia preparada:

create procedure sp_cont(in tabla varchar(15))
begin
set @strquery = concat('select count(*)as total from ',tabla);
PREPARE sent FROM @strquery;
execute sent ;
deallocate prepare sent;
set @strquery=null;
end;

Etiquetas: procedure, store
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 16:25.