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

mi procedimeinto almacenado no devuelve datos... pero esta bien hecho

Estas en el tema de mi procedimeinto almacenado no devuelve datos... pero esta bien hecho en el foro de Mysql en Foros del Web. hola, despues de tiempo he regresado a los procedimientos almacenados y al parecer me olvide. vea tengo el siguiente procedimiento: Código: CREATE DEFINER=`root`@`localhost` PROCEDURE `PA_buscadorGeneral`( ...
  #1 (permalink)  
Antiguo 16/11/2010, 16:33
Avatar de Copia  
Fecha de Ingreso: noviembre-2009
Mensajes: 309
Antigüedad: 15 años
Puntos: 4
mi procedimeinto almacenado no devuelve datos... pero esta bien hecho

hola, despues de tiempo he regresado a los procedimientos almacenados y al parecer me olvide.

vea tengo el siguiente procedimiento:
Código:
CREATE DEFINER=`root`@`localhost` PROCEDURE `PA_buscadorGeneral`( xbusca varchar(50))
BEGIN
        Select idCliente as Id,concat (Nombre,' ',Apellido) as Cliente, convenio
        from cliente
        where (idCliente like '%xbusca%') or (Nombre like '%xbusca%') or (Apellido like '%xbusca%');


END
y cuando lo ejecuto con:
Código:
CALL PA_buscadorGeneral('l');
no me muestra resultado alguno.

pero hago la consulta directa y si me muestra resultados:
Código:
Select idCliente as Id,concat (Nombre,' ',Apellido) as Cliente, convenio
        from cliente
        where idCliente like '%l%' or Nombre like '%l%' or Apellido like '%l%';
cual es mi errror?
__________________
Dejando una huella de mi existencia por la red en http://tiricaya.com
  #2 (permalink)  
Antiguo 16/11/2010, 16:57
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: mi procedimeinto almacenado no devuelve datos... pero esta bien hecho

No puedes incrustar el contenido de la variable usando '%xbusca%', en ese contexto, xbusca pasa a ser una cadena de texto, no una variable.

Es posible que para resolver eso debas hacer uso de sentencias preparadas.
__________________
¿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 16/11/2010, 17:05
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: mi procedimeinto almacenado no devuelve datos... pero esta bien hecho

Sería así:
Código MySQL:
Ver original
  1. CREATE PROCEDURE `PA_buscadorGeneral`( xbusca varchar(50))
  2.        SELECT
  3.               idCliente as Id,
  4.               CONCAT(Nombre,' ',Apellido) Cliente,
  5.               convenio
  6.         FROM cliente
  7.         WHERE
  8.               (idCliente LIKE CONCAT('%',xbusca,'%')) OR
  9.               (Nombre LIKE CONCAT('%',xbusca,'%')) OR
  10.               (Apellido LIKE CONCAT('%',xbusca,'%'));
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 16/11/2010, 17:15
Avatar de Copia  
Fecha de Ingreso: noviembre-2009
Mensajes: 309
Antigüedad: 15 años
Puntos: 4
Respuesta: mi procedimeinto almacenado no devuelve datos... pero esta bien hecho

o muchas graciasss... se me habia olvidado.
Thanks
__________________
Dejando una huella de mi existencia por la red en http://tiricaya.com
  #5 (permalink)  
Antiguo 16/11/2010, 17:37
Avatar de Copia  
Fecha de Ingreso: noviembre-2009
Mensajes: 309
Antigüedad: 15 años
Puntos: 4
Respuesta: mi procedimeinto almacenado no devuelve datos... pero esta bien hecho

disculpen el doble post pero me alegre demasiado que no vi otro error.
Lo anterior lo entiendo porque estoy haciendo una busqueda con like pero xtabla igual no se aplica el valor que lo estoy pasando, que seria cliente.
este:
Código:
CREATE PROCEDURE `PA_buscadorGeneral`(xtabla varchar(50), xbusca VARCHAR(50))
BEGIN
       SELECT 
              idCliente as Id,
              CONCAT(Nombre,' ',Apellido) Cliente, 
              convenio
        FROM xtabla
        WHERE 
              (idCliente LIKE CONCAT('%',xbusca,'%')) OR
              (Nombre LIKE CONCAT('%',xbusca,'%')) OR 
              (Apellido LIKE CONCAT('%',xbusca,'%'));
END
sobre el articulo no lo entendi :S
__________________
Dejando una huella de mi existencia por la red en http://tiricaya.com
  #6 (permalink)  
Antiguo 16/11/2010, 17: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: 17 años
Puntos: 2658
Respuesta: mi procedimeinto almacenado no devuelve datos... pero esta bien hecho

En ese caso sí que no puedes hacerlo. Para pasar el nombre de una tabla, columna o base como parámetro de un SP, sí o sí tienes que usar sentencias preparadas.
No hay otro camino.

Cita:
sobre el articulo no lo entendi :S
¿A qué te refieres?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 16/11/2010, 22:48
Avatar de Copia  
Fecha de Ingreso: noviembre-2009
Mensajes: 309
Antigüedad: 15 años
Puntos: 4
Respuesta: mi procedimeinto almacenado no devuelve datos... pero esta bien hecho

gracias por responder gnzsoloyo, si no es por tu comentario no sabria que son sentencias preparadas. Y bueno no entendi como usuarlo. Segun el ejemplo del articulo:

Código:
mysql> PREPARE stmt1 FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';
mysql> SET @a = 3;
mysql> SET @b = 4;
mysql> EXECUTE stmt1 USING @a, @b;
+------------+
| hypotenuse |
+------------+
|          5 |
+------------+
mysql> DEALLOCATE PREPARE stmt1;
entonces con prepare establesco una variable que luego ejecuto con execute??
en mi caso quiero que xtabla sea enviada desde php para que luego sea procesado en este procedure, como asigno el valor de xtabla que llega desde php?
__________________
Dejando una huella de mi existencia por la red en http://tiricaya.com
  #8 (permalink)  
Antiguo 20/11/2010, 08:41
Avatar de Copia  
Fecha de Ingreso: noviembre-2009
Mensajes: 309
Antigüedad: 15 años
Puntos: 4
Respuesta: mi procedimeinto almacenado no devuelve datos... pero esta bien hecho

Hola, nuevamente perdonen por el doble post , solo para avisar que logre solucionar mi problema y resulto ser bastante sencillo despues de ver algunos ejemplos de sentencias preparadas.

La solucion era concatener mi tabla dinamica y ejecutarlo al final con una sentencia preparada.

set consulta = 'select idCliente, Nombre, Apellido From ', xtabla, ' where idCliente = 1';

prepare @consulta = consulta;

prepare s1 from @consulta;
execute s1;
deallocate prepare s1;
__________________
Dejando una huella de mi existencia por la red en http://tiricaya.com

Etiquetas: hecho, 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 10:34.