DELIMITER //
CREATE PROCEDURE campo_adicional(IN mes INT, IN anio INT) BEGIN DECLARE cantidad INT; DECLARE precio DECIMAL(10, 2); DECLARE total_facturacion DECIMAL(10, 2) DEFAULT 0; DECLARE done INT DEFAULT 0; DECLARE error_msg VARCHAR(100);
-- Validar el rango de los parámetros de entrada
IF mes < 1 OR mes > 12 THEN
SET error_msg = 'El mes debe estar en el rango de 1 a 12.';
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = error_msg;
END IF;
IF anio < 1920 OR anio > 2025 THEN
SET error_msg = 'El año debe estar en el rango de 1920 a 2025.';
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = error_msg;
END IF;
-- Declarar el cursor
DECLARE cursor_facturas CURSOR FOR
SELECT IFa.CANTIDAD, IFa.PRECIO
FROM items_facturas IFa
INNER JOIN facturas F ON F.NUMERO = IFa.NUMERO
WHERE MONTH(F.FECHA_VENTA) = mes AND YEAR(F.FECHA_VENTA) = anio;
-- Declarar el manejador de fin del cursor
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
-- Abrir el cursor
OPEN cursor_facturas;
-- Bucle para recorrer cada fila del cursor
read_loop: LOOP
FETCH cursor_facturas INTO cantidad, precio;
IF done THEN
LEAVE read_loop;
END IF;
-- Sumar el valor de facturación en cada factura
SET total_facturacion = total_facturacion + (cantidad * precio);
END LOOP;
-- Cerrar el cursor
CLOSE cursor_facturas;
-- Mostrar el valor total de la facturación
SELECT total_facturacion AS 'Total de Facturación';
END;
//
DELIMITER ;
Explicación:
1. Validación del Rango de los Parámetros de Entrada:
1.1. Mes: Se valida que el mes esté en el rango de 1 a 12. Si no, se establece un mensaje de error y se lanza una señal SQL para interrumpir la ejecución.
1.2. Año: Se valida que el año esté en el rango de 1920 a 2025. Si no, se establece un mensaje de error y se lanza una señal SQL para interrumpir la ejecución.
**2. El Procedimiento Restante:
2.1. Declaración del cursor y el manejador de fin del cursor.
2.2. Apertura del cursor y bucle para recorrer cada fila del cursor.
2.3. Suma del valor de facturación en cada factura al total.
2.4. Cierre del cursor.
2.5. Muestra del valor total de la facturación.