Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

[Duda] Resultado = 0

CREATE DEFINER=`root`@`localhost` PROCEDURE `limite_creditos`()
BEGIN
DECLARE limite_credito FLOAT;
DECLARE volumen_compra FLOAT;
DECLARE fin_cursor INT;
DECLARE c CURSOR FOR SELECT LIMITE_CREDITO FROM tb_cliente;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET fin_cursor = 1;
SET fin_cursor = 0;
SET volumen_compra  = 0;
SET limite_credito = 0;
OPEN c;
WHILE fin_cursor = 0
DO
FETCH c INTO limite_credito;
IF fin_cursor = 0 
THEN SET volumen_compra = volumen_compra  + limite_credito;
END IF;
END WHILE;
SELECT volumen_compra;
CLOSE c;
END
CALL limite_creditos();

Imagen Workbench

Verifique que no haya datos 'null' ni 'o' pero me arroja el resultado = 0.

Imagen Workbench

1 respuesta

¡Hola Christian!

Entiendo que estás teniendo problemas con el resultado de tu procedimiento almacenado en MySQL. Parece que estás intentando sumar el límite de crédito de todos los clientes, pero el resultado que obtienes es 0, a pesar de que no hay datos nulos ni ceros en la tabla.

Una posible razón para este comportamiento es que estás inicializando la variable volumen_compra en 0 dentro del procedimiento almacenado, pero nunca la actualizas con la suma de los límites de crédito. Te sugiero que modifiques tu procedimiento de la siguiente manera:

CREATE DEFINER=`root`@`localhost` PROCEDURE `limite_creditos`()
BEGIN
    DECLARE limite_credito FLOAT;
    DECLARE volumen_compra FLOAT;
    DECLARE fin_cursor INT;
    DECLARE c CURSOR FOR SELECT LIMITE_CREDITO FROM tb_cliente;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET fin_cursor = 1;
    
    SET fin_cursor = 0;
    SET volumen_compra = 0;  -- Inicializa la variable volumen_compra en 0
    
    OPEN c;
    
    FETCH c INTO limite_credito;  -- Agrega esta línea para obtener el primer valor antes del bucle
    
    WHILE fin_cursor = 0 DO
        SET volumen_compra = volumen_compra + limite_credito;  -- Actualiza volumen_compra con la suma de los límites de crédito
        FETCH c INTO limite_credito;  -- Obtiene el siguiente valor del cursor
    END WHILE;
    
    SELECT volumen_compra;
    
    CLOSE c;
END

Con estos cambios, deberías obtener el resultado esperado al llamar al procedimiento limite_creditos(). Recuerda que es importante inicializar volumen_compra antes del bucle y actualizar su valor dentro del bucle para que refleje la suma total de los límites de crédito.

Espero que esta modificación te ayude a obtener el resultado deseado. ¡Buena suerte!

Espero haber ayudado y buenos estudios!

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios!