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

problema al llamar funcion en Mysql

Estas en el tema de problema al llamar funcion en Mysql en el foro de Mysql en Foros del Web. Buenas tardes, estoy entrando al mysql y con mucho esfuerzo cree una funcion (no sabia nada de los delimiter) bueno supuestamente logre crear la siguiente ...
  #1 (permalink)  
Antiguo 28/04/2011, 16:14
 
Fecha de Ingreso: febrero-2008
Mensajes: 29
Antigüedad: 16 años, 1 mes
Puntos: 0
problema al llamar funcion en Mysql

Buenas tardes, estoy entrando al mysql y con mucho esfuerzo cree una funcion (no sabia nada de los delimiter) bueno supuestamente logre crear la siguiente funcion:

DELIMITER $$
DROP FUNCTION IF EXISTS `ldr`.`fc_getDesEmailContacto`$$
CREATE DEFINER=`root`@`localhost` FUNCTION `ldr`.`fc_getDesEmailContacto` (ide_empresa int) RETURNS VARCHAR(100) DETERMINISTIC
BEGIN
DECLARE salida VARCHAR(100);

SELECT DES_EMAIL into salida FROM CONTACTO where IDE_EMPRESA = ide_empresa;


RETURN salida;
END $$

DELIMITER ;


se crea correctamente o por lo menos no veo ningun mensaje de error:
pero cuando lo llamo:

select fc_getDesEmailContacto(99)

me sale lo siguiente

Error code 1172, SQL state 42000: Resultado compuesto de mas que una línea


No se que pueda ser supuestamente deberia devolver un registro ya que por ese ide solo hay un registro, bueno asi hacia en oracle.

No se si me podrian ayudar muchas gracias de antemano.
  #2 (permalink)  
Antiguo 28/04/2011, 16:32
 
Fecha de Ingreso: abril-2009
Mensajes: 83
Antigüedad: 15 años
Puntos: 2
Respuesta: problema al llamar funcion en Mysql

tu esperas un solo registro pero tu query tra mas de uno
  #3 (permalink)  
Antiguo 28/04/2011, 17:43
 
Fecha de Ingreso: febrero-2008
Mensajes: 29
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: problema al llamar funcion en Mysql

Cita:
Iniciado por papay0 Ver Mensaje
tu esperas un solo registro pero tu query tra mas de uno

gracias por contestar claro segun el mensaje de error dice que arroja mas de un registro. pero revisando la consulta debria arrojar solo un registro ya cotege hice un select des_email from contacto where ide_empresa=99 y arroja solo un registro

no se si el INTO que uso esta devolviendo aparte de el dato esta devolviendo el encabezado y la considera como un registro mas , en oracle siempre hacia este tipo de funciones y no habia problemas.
  #4 (permalink)  
Antiguo 28/04/2011, 18:26
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: problema al llamar funcion en Mysql

Bueno, si realmente quieres saber si hay repeticiones, usa esto:
Código MySQL:
Ver original
  1. FROM CONTACTO
  2. GROUP BY IDE_EMPRESA
Si eso te devuelve algún registro, entonces el problema es real.
__________________
¿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 28/04/2011, 18:48
 
Fecha de Ingreso: febrero-2008
Mensajes: 29
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: problema al llamar funcion en Mysql

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Bueno, si realmente quieres saber si hay repeticiones, usa esto:
Código MySQL:
Ver original
  1. FROM CONTACTO
  2. GROUP BY IDE_EMPRESA
Si eso te devuelve algún registro, entonces el problema es real.
Gracias por responder ejecute el script que posteaste y me arrojo lo siguiente phpadmin:

MySQL ha devuelto un valor vacío (i.e., cero columnas). ( La consulta tardó 0.0007 seg )

Parece que no hay repeticiones , ademas es clave primaria (y es la unica) ide_empresa
  #6 (permalink)  
Antiguo 28/04/2011, 18:58
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: problema al llamar funcion en Mysql

Bien, observando un poco mejor tu problema la cosa es simplísima: Estás usando el mismo nombre para el campo de la tabla, que para la variable de entrada... Eso está mal.
El parser de MySQL analiza jerárquicamente las cosas, y como una columna tiene más jerarquía que una variable local, interpreta que el segundo elemento de la comparación es también el campo (MySQL no diferencia entre mayúsculas y minúsculas en el cuerpo de un SF o SP).
En otras palabras, tu consulta le está diciendo a MySQL que devuelva el valor de DES_EMAIL, donde la clave primaria sea igual a sí misma... O sea, te está devolviendo TODA la tabla.

¿Se entiende?

La solución es: Ponle a la variable otro nombre.

Código MySQL:
Ver original
  1. DELIMITER $$
  2. DROP FUNCTION IF EXISTS `ldr`.`fc_getDesEmailContacto`$$
  3. CREATE FUNCTION `ldr`.`fc_getDesEmailContacto` (id_empresa int) RETURNS VARCHAR(100) DETERMINISTIC
  4.     DECLARE salida VARCHAR(100);
  5.     SELECT DES_EMAIL into salida FROM CONTACTO where IDE_EMPRESA = id_empresa;
  6.     RETURN salida;
  7. END $$
  8. 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)
  #7 (permalink)  
Antiguo 28/04/2011, 19:22
 
Fecha de Ingreso: febrero-2008
Mensajes: 29
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: problema al llamar funcion en Mysql

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Bien, observando un poco mejor tu problema la cosa es simplísima: Estás usando el mismo nombre para el campo de la tabla, que para la variable de entrada... Eso está mal.
El parser de MySQL analiza jerárquicamente las cosas, y como una columna tiene más jerarquía que una variable local, interpreta que el segundo elemento de la comparación es también el campo (MySQL no diferencia entre mayúsculas y minúsculas en el cuerpo de un SF o SP).
En otras palabras, tu consulta le está diciendo a MySQL que devuelva el valor de DES_EMAIL, donde la clave primaria sea igual a sí misma... O sea, te está devolviendo TODA la tabla.

¿Se entiende?

La solución es: Ponle a la variable otro nombre.

Código MySQL:
Ver original
  1. DELIMITER $$
  2. DROP FUNCTION IF EXISTS `ldr`.`fc_getDesEmailContacto`$$
  3. CREATE FUNCTION `ldr`.`fc_getDesEmailContacto` (id_empresa int) RETURNS VARCHAR(100) DETERMINISTIC
  4.     DECLARE salida VARCHAR(100);
  5.     SELECT DES_EMAIL into salida FROM CONTACTO where IDE_EMPRESA = id_empresa;
  6.     RETURN salida;
  7. END $$
  8. DELIMITER ;



muchas gracias efectivamente ese era el problema pequeño detalle , muchas gracias por el apoyo ahora si esta funcionando bien la llamada

Etiquetas: funcion
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 18:14.