Duplicar filas de tabla con un Procedimiento Almacenado SQL

hamedm Seguir

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

Alfa
Verificación en dos pasos desactivada
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
13 Jun 2020
Mensajes
15
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.
 

¡Regístrate y comienza a ganar!

Beneficios

  • Gana dinero por participar
  • Gana dinero por recomendarnos
  • Descubre ofertas de empleo diariamente
  • Negocios seguros
  • ¡Información premium y más!

Acceder

¿Ya tienes una cuenta? Accede aquí

Arriba