1
respuesta

DUDA ACTIVIDAD 8 CLASE 5

Que tal estimados, Tengo la siguiente duda con relación al script que seguidamente les pas ¿a que se debe e error que se genera al setear la variables vcantidad y vprecio? Si las seteo despues de hacer "OPEN c" por ejemplo, o despues de setear fin_c, en ambos casos no me da error ¿cual es la razon?. Además tampoco comprendo por qué el resultado me da un null pese a haber seteado las variables. Aqui va el script:

CREATE DEFINER=`root`@`localhost` PROCEDURE `campo_adicional`(vmes INT, vano INT)
BEGIN
DECLARE fin_c INT DEFAULT 0;
DECLARE vcantidad INT;
DECLARE vprecio DECIMAL;
DECLARE vfacturacion DECIMAL;
DECLARE vfacturacion_total DECIMAL;
SET vcantidad = 0;
SET vprecio = 0;
DECLARE C CURSOR FOR SELECT CANTIDAD, PRECIO FROM items_facturas IFa
INNER JOIN facturas F ON F.NUMERO = IFa.NUMERO
WHERE MONTH(F.FECHA_VENTA) = vmes AND YEAR(F.FECHA_VENTA) = vano;
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET fin_c = 1;
OPEN c;
WHILE fin_c = 0
DO
FETCH c INTO vcantidad, vprecio;
SET vfacturacion = vcantidad * vprecio;
SET vfacturacion_total = vfacturacion_total + vfacturacion;
IF fin_c = 0
THEN SELECT CONCAT("El mes es " + vmes + " y el año es:  "+ vano + "y la facturacion 
total es " + vfacturacion_total) AS RESULTADO;
END IF;
END WHILE;
CLOSE c;
END

Gracias! Saludos!.

1 respuesta

Hola estimado/a,

Gracias por compartir tu duda con nosotros. Parece que estás teniendo problemas al establecer las variables vcantidad y vprecio en tu script.

La razón por la que no obtienes un error al establecer estas variables después de hacer "OPEN c" o después de establecer fin_c es porque en ambos casos ya has declarado las variables y les has asignado un valor predeterminado. Por lo tanto, no hay un error de sintaxis al establecerlas nuevamente.

En cuanto a por qué obtienes un resultado nulo a pesar de haber establecido las variables, es posible que haya un problema en la lógica de tu script. Parece que estás calculando vfacturacion_total dentro de un bucle WHILE, pero no estás inicializando esta variable antes de comenzar el bucle. Como resultado, vfacturacion_total se inicializa como NULL y no se actualiza correctamente durante el bucle.

Para solucionar este problema, te recomendaría inicializar vfacturacion_total antes de comenzar el bucle WHILE. Puedes hacerlo agregando la siguiente línea de código justo después de la declaración de la variable:

SET vfacturacion_total = 0;

Esto asegurará que vfacturacion_total se inicialice correctamente antes de comenzar a calcular su valor dentro del bucle.

Espero que esta explicación te ayude a entender y resolver tu problema. Si tienes alguna otra pregunta, no dudes en preguntar.

¡Espero haber ayudado y buenos estudios!

Un saludo.

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