Duplicar filas de tabla con un Procedimiento Almacenado SQL

hamedm

Gamma
Programador
Verificación en dos pasos desactivada
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>
 

Weyne

Curioso
Verificación en dos pasos desactivada
Verificado por Whatsapp
Desde
13 Jun 2020
Mensajes
3
Si quieres copiar toda la info de tu tabla Grado_has_Asignatura por el último ano_per_id registrado. Lo que tienes que hacer es obtener la info como lo estas haciendo en tu subquery y luego hacer un INSERT SELECT, claro que en el SELECT donde va el valor de ano_per_id tendrías que reemplazarlo por el ID que generaste para tu nuevo periodo.

INSERT INTO Grado_has_Asignatura(gra_id,asi_id,ano_per_id)
SELECT gra_id,asi_id,AquiTuNuevoIDPeriodo
FROM Grado_has_Asignatura
WHERE ano_per_id = (SELECT DISTINCT ano_per_id FROM Grado_has_Asignatura ORDER BY ano_per_id DESC LIMIT 1)

1592089144330.png

1592089221163.png

1592089279965.png

Saludos.
 

Arriba