Para ello, utiliza un cursor que recorra los registros de “tipoSancion” y, por
cada uno de ellos, ejecute una consulta con la que se inserte en la tabla
“acumulado” los puntos acumulados por dicho tipo de sanción:
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `puntosPorTipoSancion`()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE v_idTipoSancion,
sumaPuntos INT;
DECLARE cur CURSOR FOR SELECT
idtipoSancion FROM tipoSancion;
DECLARE CONTINUE HANDLER FOR NOT
FOUND SET done = TRUE;
DELETE FROM acumulado
WHERE anyo = YEAR(CURRENT_DATE);
OPEN cur;
read_loop: LOOP
FETCH cur INTO
v_idTipoSancion;
IF done THEN
LEAVE read_loop;
END IF;
SELECT SUM(puntos) INTO
sumaPuntos FROM sancion
WHERE idtipoSancion =
v_idTipoSancion AND YEAR(fecha) = YEAR(CURRENT_DATE);
INSERT INTO acumulado
VALUES (YEAR(CURRENT_DATE), v_idTipoSancion, sumaPuntos);
END LOOP;
CLOSE cur;
END
Tabla de referencia:
No hay comentarios:
Publicar un comentario