MySQL - Usar un PA como buscador con parámetros

 
Vista:
Imágen de perfil de Jhon
Val: 10
Ha aumentado 1 puesto en MySQL (en relación al último mes)
Gráfica de MySQL

Usar un PA como buscador con parámetros

Publicado por Jhon (12 intervenciones) el 22/01/2016 02:54:41
Cordial saludo.
Quiero hacer un procedimiento almacenado para buscar productos en mi tabla productos. Si yo quiero buscar un producto por su nombre podría hacer algo como esto:

1
2
select *from productos
where nombreProducto like ("%miproducto%");

Pero digamos que ahora quiero hacerlo en un procedimiento almacenado y cambiar "miproducto" por cualquier otro producto que me den como parámetro.

1
2
3
4
5
CREATE PROCEDURE 'MiBuscador'(IN producto VARCHAR(45))
BEGIN
select *from productos
where nombreProducto like ("%producto%");
END


Lo cual como seguramente ustedes sí sabían, no funcionó.

¿Cuál sería la manera correcta de darle un parámetro a un PA para hacer un like?
Gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 20
Ha disminuido su posición en 25 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

Usar un PA como buscador con parámetros

Publicado por Gonzalo (3 intervenciones) el 05/02/2016 16:31:41
Bueno, por lo pronto, no confundas los apostrofos (') con los acentos graves (`). Se usan para cosas diferentes.
Los apostrofos son para cadenas de texto, exclusivamente.
Los acentos graves se usan para objetos de bases de datos, tales como nombres de tablas, columnas, triggers, stored procedures, ,indices, bases, etc.
Esto quiere decir que esto:

1
CREATE PROCEDURE 'MiBuscador'(IN producto VARCHAR(45))

Debería estar escrito así:

1
CREATE PROCEDURE `MiBuscador`(IN producto VARCHAR(45))

O bien:

1
CREATE PROCEDURE MiBuscador(IN producto VARCHAR(45))

Por otro lado, las variables de entrada no se comportan como PHP, no puedes simplemente incrustarlas en una cadena, porque MySQL no las reemplazará por sus valores.

1
where nombreProducto like CONCAT('%', producto, '%');

Además, ten en cuenta que las comillas (") tiene un comportamiento diferente según la configuración del servidor MySQL. Pueden ser tomadas como contenedores de cadenas de texto, o sólo con el mismo uso de los acentos agudos, para los nombres de objetos de base. Hay un parámetro del servidor que determina eso, por lo que es mejor evitarlas para no caer en errores de sintaxis de difícil diagnóstico.

Prueba eso y veamos si sigues con problemas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Jhon
Val: 10
Ha aumentado 1 puesto en MySQL (en relación al último mes)
Gráfica de MySQL

Usar un PA como buscador con parámetros

Publicado por Jhon (12 intervenciones) el 08/02/2016 15:52:38
Muchas gracias. No había revisado mi correo, por eso la tardanza. Ahora no estoy en mi pc, pero esta noche reviso.
Te agradezco mucho.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar