- Desde
- 7 Ene 2013
- Mensajes
- 193
Buenas Forobetanos, he estado en un proyecto relacionado con la academia y estoy haciendo un portal relacionado con ello.
Sucede que cada grado tiene ciertas asignaturas. Quiero que cuando se crea un nuevo periodo o Año academico, todas las asignaturas de los grados vuelvan a registrarse en esa misma tabla pero ahora con el nuevo periodo.
Lo estoy haciendo en un procedimiento Almacenado para luego invocarlo en un trigger. Sucede que cuando lo invoco, solo me duplica el ultimo registro y no todos los del año o periodo pasado. Este es el codigo:
<code>
DROP PROCEDURE IF EXISTS proc_ins_grado_has_asignatura_after_Ano_has_Periodo;
DELIMITER $$
CREATE PROCEDURE proc_ins_grado_has_asignatura_after_Ano_has_Periodo(IN periodo INT)
BEGIN
declare resta INT;
SET resta = 0;
WHILE (SELECT COUNT(ano_per_id)-resta FROM Grado_has_Asignatura WHERE ano_per_id = (SELECT ano_per_id FROM Grado_has_Asignatura ORDER BY ano_per_id DESC LIMIT 1))>0 DO
INSERT INTO Grado_has_Asignatura (gra_id,asi_id,ano_per_id) SELECT gra_id,asi_id,periodo FROM Grado_has_Asignatura WHERE gra_asi_id = (SELECT gra_asi_id-resta FROM Grado_has_Asignatura ORDER BY ano_per_id DESC LIMIT 1);
SET resta = resta+1;
END WHILE;
END $$
DELIMITER ;
CALL proc_ins_grado_has_asignatura_after_Ano_has_Periodo(2);
</code>
Sucede que cada grado tiene ciertas asignaturas. Quiero que cuando se crea un nuevo periodo o Año academico, todas las asignaturas de los grados vuelvan a registrarse en esa misma tabla pero ahora con el nuevo periodo.
Lo estoy haciendo en un procedimiento Almacenado para luego invocarlo en un trigger. Sucede que cuando lo invoco, solo me duplica el ultimo registro y no todos los del año o periodo pasado. Este es el codigo:
<code>
DROP PROCEDURE IF EXISTS proc_ins_grado_has_asignatura_after_Ano_has_Periodo;
DELIMITER $$
CREATE PROCEDURE proc_ins_grado_has_asignatura_after_Ano_has_Periodo(IN periodo INT)
BEGIN
declare resta INT;
SET resta = 0;
WHILE (SELECT COUNT(ano_per_id)-resta FROM Grado_has_Asignatura WHERE ano_per_id = (SELECT ano_per_id FROM Grado_has_Asignatura ORDER BY ano_per_id DESC LIMIT 1))>0 DO
INSERT INTO Grado_has_Asignatura (gra_id,asi_id,ano_per_id) SELECT gra_id,asi_id,periodo FROM Grado_has_Asignatura WHERE gra_asi_id = (SELECT gra_asi_id-resta FROM Grado_has_Asignatura ORDER BY ano_per_id DESC LIMIT 1);
SET resta = resta+1;
END WHILE;
END $$
DELIMITER ;
CALL proc_ins_grado_has_asignatura_after_Ano_has_Periodo(2);
</code>