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

resultado ejercicio


CREATE DEFINER=`root`@`localhost` PROCEDURE `campo_adicional`(IN mes INT, IN anio INT)
BEGIN
 -- Declaración de variables
    DECLARE v_cantidad INT;
    DECLARE v_precio DECIMAL(10, 2);
    DECLARE v_total_facturacion DECIMAL(10, 2) DEFAULT 0;
    DECLARE done INT DEFAULT 0;

    -- Declaración del cursor
    DECLARE factura_cursor 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;

    -- Manejador para la condición de fin del cursor
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

    -- Abrir el cursor
    OPEN factura_cursor;

    -- Bucle para recorrer los resultados del cursor
    factura_loop: LOOP
        FETCH factura_cursor INTO v_cantidad, v_precio;

        IF done THEN
            LEAVE factura_loop;
        END IF;

        -- Acumular la facturación
        SET v_total_facturacion = v_total_facturacion + (v_cantidad * v_precio);
    END LOOP factura_loop;

    -- Cerrar el cursor
    CLOSE factura_cursor;

    -- Mostrar el total de facturación
    SELECT v_total_facturacion AS Total_Facturacion;


END
CALL campo_adicional(2, 2015);

Es con parametros, para que sea mas funcional, se pueden buscar datos por mes y año que se desee. Imagen Workbench

"factura_loop: LOOP"

Esta línea inicia un bucle llamado factura_loop. En SQL, los bucles se utilizan para repetir un bloque de código hasta que se cumpla una condición de salida.

"FETCH factura_cursor INTO v_cantidad, v_precio;"

La instrucción FETCH se utiliza para recuperar la siguiente fila del cursor factura_cursor. Los valores de las columnas seleccionadas (en este caso, CANTIDAD y PRECIO) se almacenan en las variables v_cantidad y v_precio, respectivamente. Si no hay más filas para recuperar, el cursor establece la condición de fin.

"IF done THEN"

Aquí se evalúa la variable done, que es una bandera que indica si se ha llegado al final del cursor. Esta variable se establece en 1 (verdadero) por el manejador de excepciones cuando no hay más filas disponibles en el cursor.

"LEAVE factura_loop;"

Si done es verdadero (es decir, si ya no hay más filas), la instrucción LEAVE se ejecuta, lo que provoca que el bucle factura_loop termine y el control se transfiera a la siguiente instrucción después del bucle.

1 respuesta

Hola, Christian ,

Gracias por compartir tu código con nosotros. Recuerda que estamos aquí para ayudarte. Si necesitas ayuda, no dudes en buscarnos en el foro.

¡Gracias nuevamente!

Saludos,

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