Acceder Registrarme

Procedimiento almacenado con mysql


Por: Carlos Eduardo Rodríguez Carrillo Publicado el: 2018-01-11 12:45:27 Pregunta cerrada

Hola muchachos buenos días nuevamente aquí con nuevas dudas. 

 

Estoy haciendo un mantenerdor en java Desktop y en la parte de búsqueda tengo una campo de texto en donde ingresaría el valor a buscar, pero además tengo unos radiobuttons que me permitieran elegir el campo de mi tabla en qué buscar. 

Me explico: Tengo una tabla de proveedores con 3 campos: nombre, pais, region. Entonces en mi aplicación tengo una caja de texto donde ingreso el valor a buscar, pero además los radiobuttons me permiten elegir entre si buscar en el campo nombre o en el campo pais o en el campo región. 

Entonces mi SP en Mysql lo hice así: 

DELIMITER $$
CREATE PROCEDURE listarProveedores(campo varchar(50), valor varchar(50))
BEGIN
  select * from suppliers where campo like concat('%',valor,'%');
END
$$
DELIMITER ;

Y cuando llamo al SP:

CALL listarProveedores('ContactName','ch'); no me muestra nada. 

Favor de que alguien me dé una opción.Gracias de antemano. 



MySql

Usuario de (Perú)

Hola Carlos, el problema es que al pazar "Campo" como parámetro, no es que estés interactuando con ese campo de la base de datos... si no es que estás pasándolo como cadena y al hacer like... lo compara con esa cadena... lo que podrías hacer en este caso es pasar como paráemtro toda la consulta aplicando un poco de inyección SQL aunque no recomiendo esto último... lo ideal, si quieres seleccionar un campo para tu consulta, sería agregar condiciones a tu procedimientos especificando una consulta u otra según sea el caso.

  • 2018-01-11 12:55:59
  • Me gusta(0)

Hola Kevin gracias por tu respuesta, pero no logro entenderla del todo. 

  • 2018-01-11 13:52:54
  • Me gusta(0)
Usuario de (Perú)

Revisa el tema de condicionales en SQL... así como manejas condiciones en el lenguaje de programación donde desarrollas; igual puedes hacerlo en SQL.

Saludos.

  • 2018-01-11 15:05:18
  • Me gusta(0)

Sí Kevin muchas gracias ya lo revisé y pude obtener una solución para mi problema. 

Lo solucioné modificando mi SP y dejándolo de la siguiente forma:

DELIMITER $$
CREATE PROCEDURE listarProveedores(campo varchar(50), valor varchar(50))
BEGIN
    IF campo = 'nombre' THEN
        select * from suppliers where CompanyName like concat('%',valor,'%');
    ELSEIF campo = 'pais' THEN
        select * from suppliers where Country like concat('%',valor,'%');
    ELSEIF campo = 'ciudad' THEN
        select * from suppliers where City like concat('%',valor,'%');
    END IF;
END
$$
DELIMITER ;

 

Muchas gracias por tu tiempo =)

  • 2018-01-11 16:22:54
  • Me gusta(1)
Usuario de (Perú)

Excelente... para la siguiente trata de usar la herramienta de inserción de código... tanto para postear tu pregunta como para comentar...

Así es más legible el contenido. :)

Saludos Carlos.

  • 2018-01-11 16:25:38
  • Me gusta(1)

Ok Kevin gracias.

  • 2018-01-11 16:27:53
  • Me gusta(0)

  • Debes estar logueado para realizar comentarios