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

Problemas con parametros en un Stored Procedure

Estas en el tema de Problemas con parametros en un Stored Procedure en el foro de Mysql en Foros del Web. Hola gente, tengo el siguiente problema: Estoy aprendiendo a crear Stored Procedures con MySql 5.1 Tengo una Tabla Clientes que tiene: Id_Cliente y Nombre_Cliente Mi ...
  #1 (permalink)  
Antiguo 21/04/2009, 06:31
 
Fecha de Ingreso: junio-2008
Mensajes: 19
Antigüedad: 15 años, 10 meses
Puntos: 0
Pregunta Problemas con parametros en un Stored Procedure

Hola gente, tengo el siguiente problema:
Estoy aprendiendo a crear Stored Procedures con MySql 5.1
Tengo una Tabla Clientes que tiene: Id_Cliente y Nombre_Cliente
Mi SP lo quiero para hacer una búsqueda por nombre de Cliente, entonces le pongo un parametro VARCHAR (50) que le paso con PHP (igual no viene al caso) y lo comparo con ese parametro mediante la sentencia LIKE pero cuando ejecuto el SP me dice que 1054 - "Unknown column 'xxx'in 'field list'", es decir que no encuentra ningun registro con ese parametro que ingresé, pero ete aqui dijo Berugo Carambula, que si existe un cliente con ese nombre o que contiene ese texto, si yo ejecuto la consulta por afuera del SP no tengo problemas.

Código:
ALTER PROCEDURE (IN texto VARCHAR(50))
BEGIN
SELECT * FROM clientes
where Nombre_Cliente Like '%texto%';
END
Esto me pasa con este campo ya que si yo modifico el parametro de comparación es decir creo este SP:

Código:
ALTER PROCEDURE (IN codigo INT)
BEGIN
SELECT * FROM clientes
where Id_Cliente = codigo;
END
No tengo problemas.
A modo de aclaración Los SP los creo y ejecuto con el Navicat 8 for MySql.

Última edición por RafaelEW; 21/04/2009 a las 07:42
  #2 (permalink)  
Antiguo 21/04/2009, 07:01
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: Problemas con parametros en un Stored Procedure

Cita:
me dice que 1054 - "Unknown column 'xxx'in 'field list'", es decir que no encuentra ningun registro con ese parametro que ingresé
No es eso. Te está diciendo que la columna indicada no existe...
Además, a menos que hayas sintetizado el código que estás posteando, en esto:

Código sql:
Ver original
  1. ALTER PROCEDURE (IN texto VARCHAR(50))
  2. BEGIN
  3. SELECT * FROM clientes
  4. WHERE Nombre_Cliente LIKE '%texto%';
  5. END
¿Dónde está el nombre del PROCEDURE, y porqué un ALTER en vez de un CREATE?
Más simple sería:
Código sql:
Ver original
  1. DELIMITER $$
  2. DROP PROCEDURE IF EXISTS procedimiento$$
  3.  
  4. CREATE PROCEDURE procedimiento(IN texto VARCHAR(50))
  5. BEGIN
  6. SELECT * FROM clientes
  7. WHERE  Nombre_Cliente LIKE '%texto%';
  8. END$$
  9.  
  10. 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)
  #3 (permalink)  
Antiguo 21/04/2009, 07:25
 
Fecha de Ingreso: junio-2008
Mensajes: 19
Antigüedad: 15 años, 10 meses
Puntos: 0
De acuerdo Respuesta: Problemas con parametros en un Stored Procedure

Si, en realidad estaba sintetizando el código ya que en el Navicat 8, solamente me tengo que encargar de lo que va entre el BEGIN y el END, los parametros los declaro aparte y lo del ALTER lo puse yo para poner algo, pero el procedimiento si tiene nombre.

Bueno, voy a revisar el nombre de la columna y te aviso como fue.
No estoy con mi máquina, pero estoy seguro que ese es el nombre de la columna.
Muchas gracias por la respuesta.
  #4 (permalink)  
Antiguo 21/04/2009, 08:28
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: Problemas con parametros en un Stored Procedure

Una pregunta más ería: ¿Estás consultando una TABLA o una VISTA?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 21/04/2009, 10:53
 
Fecha de Ingreso: junio-2008
Mensajes: 19
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Problemas con parametros en un Stored Procedure

No, no logro hacerlo funcionar, me parece que el problema es con el Like, leí por ahi que reiniciando el servidor podía funcionar, pero tampoco.
Ya no se que más hacer y es una consulta muy sencilla.
Ni me quiero imaginar con otras consultas.

El procedimiento hace una consulta a la tabla y no a una vista.

Saludos y gracias por responder
  #6 (permalink)  
Antiguo 21/04/2009, 20:50
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: Problemas con parametros en un Stored Procedure

Bueno, al final, deduciendo y probando una hipótesis he llegado a la conclusión que tu error no está en el SP ni en la lógica de las tablas, sino en un elemento más simple: Estás haciendo mal la llamada al SP.

El caso es que en vez de estár ingresando el parámetro como un string, estás poniendo el parámetro como el nombre de una variable.
Me explico:
Si yo llamo al SP así:
Código sql:
Ver original
  1. CALL clientes('xxx');
Mysql interpreta que quiero buscar la cadena "xxx" en el campo Nombre_Cliente.
Pero si en cambio lo invoco así:
Código sql:
Ver original
  1. CALL clientes(xxx);
lo que intenta comparar es al campo Nombre_Cliente con un campo llamado XXX. Esto significa que está interpretando el nombre de un parámetro como nombre de un campo... que en realidad no existe. y entonces el problema pasa a ser de programación.

Tienes dos opciones:
1. Parametrizar la sentencia de llamada (fácil de hacer si trabajas en VB.Net o Java) para ingresar el valor de la variable por el nombre de la variable.
2. Construir la sentencia (PHP) de modo que el valor de la variable quede encerrado entre dos apóstrofes ('xxx').

Pruébalo y me cuentas.
__________________
¿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 21/04/2009, 22:43
 
Fecha de Ingreso: junio-2008
Mensajes: 19
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Problemas con parametros en un Stored Procedure

No, ese no es el problema, ya que yo no me encargo de eso, lo hace automativamente el Navicat.
Siguiendo con las pruebas, decidí agregar más columnas a la tabla, puse una columa GANANCIAS FLOAT(10,2) y una columna DIRECCION VARCHAR(50) y llegué a la conclusión que el problema está con las variables VARCHAR ya que si ejecuto este SP:

Código:
CREATE PROCEDURE buscarclientes (IN texto FLOAT(10,2))
BEGIN
DECLARE buscar FLOAT(10,2);
SET buscar = texto;
SELECT * FROM clientes
WHERE Ganancias LIKE buscar;
END
Me trae correctamente los clientes cuya ganacia es igual al parametro que ingresé.

Asi que seguiré buscando, ya posteé esta duda en el foro de MySql si no me la responden ahí estoy al horno.
  #8 (permalink)  
Antiguo 22/04/2009, 05:45
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: Problemas con parametros en un Stored Procedure

¿Y cómo es exactamente la sintaxis de la consulta que el Navicat le está enviando al server de MySQL para ejecutar el procedure?

Antes de rechazar mi sugerencia, te diría que probaras invocar manualmente el procedure de las dos formas y ver si responde o no como te lo sugiero.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 23/04/2009, 15:40
 
Fecha de Ingreso: junio-2008
Mensajes: 19
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Problemas con parametros en un Stored Procedure

Bueno despues de tanto pelear encontrè que el problema era la aplicación que estaba utilizando, se llama Navicat 8 for MySql, así que no se las recomiendo.
Me instalé MySql Tools y problema solucionado.

Saludos.-
  #10 (permalink)  
Antiguo 25/04/2009, 20:51
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: Problemas con parametros en un Stored Procedure

Bien.
Me he tomado el tiempo de instalar el Navicat 8 y probar tu problema sobre la base de los códigos que has posteado, comprobando efectivamente que el problema que has tenido se debe al incorrecto ingreso del parámetro al momento de la prueba... Como te postee un poco más arriba.
El problema es que al abrirse el dialog de parámetros, lo que has estado ingresando es xxx, mientras que lo que debías ingresar es 'xxx', entre apóstrofes.
Hice personalmente la prueba y cuando lo ingresas como 'xxx', el procedure se ejecuta correctamente.
Eso era todo el problema, nada más.
La cosa pasa por el lado de que la aplciación no puede definir a priori si lo que ingresas es un parámetro numérico, flotante, string, o una variable. Los toma como los pones, entonces, si lo que quieres es ingresar una cadena, debes escribirla como cadena en SQL... que lleva siempre apóstrofes. Si hubieses enviado xxx como nombre de variable, entonces no habrías tenido problemas.

Eso es todo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
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 01:08.