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

funciones que retorne un valor entero de una consulta

Estas en el tema de funciones que retorne un valor entero de una consulta en el foro de Mysql en Foros del Web. Buenos dias a todos, actualmente tengo un problema al crear funciones con mysql pues estoy tratando de traer valores enteros por medio de una consulta ...
  #1 (permalink)  
Antiguo 13/11/2013, 10:25
Avatar de oscard41  
Fecha de Ingreso: mayo-2012
Ubicación: Caracas
Mensajes: 288
Antigüedad: 12 años, 5 meses
Puntos: 8
funciones que retorne un valor entero de una consulta

Buenos dias a todos,

actualmente tengo un problema al crear funciones con mysql pues estoy tratando de traer valores enteros por medio de una consulta algo como esto:

Código MySQL:
Ver original
  1. DELIMITER //
  2. CREATE  FUNCTION F_CantidadArticuloAjuste(id_articuloF int) RETURNS INT
  3.  
  4.  
  5.   declare cantidad int;
  6.  
  7.   set cantidad = (Select sum(cantidad)
  8.                            From detalle_ajuste
  9.                           Where id_articulo = id_articuloF);
  10.  
  11.    return cantidad;
  12.  
  13. end //
  14.  
  15. DELIMITER ;

pero no me retorna ningun valor de igual manera si intento retornar valores char o varchar o de cualquier tipo si es de una consulta simplemente no puedo retornar el valor...

de ante mano a los que me puedan ayudar con esto muchas gracias..
  #2 (permalink)  
Antiguo 13/11/2013, 10:31
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: funciones que retorne un valor entero de una consulta

Técnicamente, no hay un error en la consulta ni en la función, pero es mejor hacer cietras cosas:
1) La primera, es asegurarte de incializar las variables, porque de lo contrario valen NULL. Y toda operacion con NULL da... NULL.
2) La otra es asegurarte de que el resultado exista, aún cuando devuelva NULL.
3) Nunca uses el mismo nombre para variables, parámetros que para columnas o tablas. MySQL es jerárquico, e interpretará que te refieres a los objetos de la base, y no a las tablas.
Código MySQL:
Ver original
  1. DELIMITER $$
  2. CREATE  FUNCTION F_CantidadArticuloAjuste(id_articuloF INT) RETURNS INT
  3.     DECLARE cant INT;
  4.     SET cant = 0;
  5.     SET cant = (SELECT sum(cantidad) FROM detalle_ajuste WHERE id_articulo = id_articuloF);
  6.     SET cant = IFNULL(cantidad = 0);
  7.     RETURN cant;
  8. END $$
  9.  
  10. DELIMITER ;

Por otro lado, te recomiendo no usar caracteres o simbolos propios del SQL para usarlos como DELIMITERs, es mejor atenerte al modelo usado en el manual de referncia. Utiliza "$$", que seguro no es usado para nada.
__________________
¿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 13/11/2013, 10:52
Avatar de oscard41  
Fecha de Ingreso: mayo-2012
Ubicación: Caracas
Mensajes: 288
Antigüedad: 12 años, 5 meses
Puntos: 8
Respuesta: funciones que retorne un valor entero de una consulta

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Técnicamente, no hay un error en la consulta ni en la función, pero es mejor hacer cietras cosas:
1) La primera, es asegurarte de incializar las variables, porque de lo contrario valen NULL. Y toda operacion con NULL da... NULL.
2) La otra es asegurarte de que el resultado exista, aún cuando devuelva NULL.
3) Nunca uses el mismo nombre para variables, parámetros que para columnas o tablas. MySQL es jerárquico, e interpretará que te refieres a los objetos de la base, y no a las tablas.
Muchas gracias, la verdad tenia como 40 minutos en esto y todo por el nombre de variables...

nuevamente GRACIAS.

Etiquetas: entero, funciones, retorne, select, sql, valor
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 11:00.