CREATE OR REPLACE PROCEDURE actualizar_estado_materia (p_id_estudiante INTEGER,p_id_materia INTEGER, p_id_carrera INTEGER) AS fecha_inscripcion_cursado DATE; cant_parciales INTEGER; cant_parciales_aprobados INTEGER; cant_parciales_reprobados INTEGER; BEGIN SELECT MAX(fecha_inscripcion) INTO fecha_inscripcion_cursado FROM alumnos_cursando_materias WHERE id_materia = p_id_materia AND id_estudiante = p_id_estudiante; SELECT COUNT(*) INTO cant_parciales FROM alumnos_cursando_notas notas JOIN materias mat ON notas.id_materia = mat.id_materia JOIN tipo_notas tip ON notas.id_tipo_nota = tip.id_tipo_nota WHERE notas.id_estudiante = p_id_estudiante AND notas.id_materia = p_id_materia AND notas.id_carrera = p_id_carrera AND notas.fecha_inscripcion = fecha_inscripcion_cursado AND LOWER(tip.n_tipo_nota) LIKE ‘%parcial%’; SELECT COUNT(*) INTO cant_parciales_aprobados FROM alumnos_cursando_notas notas JOIN materias mat ON notas.id_materia = mat.id_materia JOIN tipo_notas tip ON notas.id_tipo_nota = tip.id_tipo_nota WHERE notas.id_estudiante = p_id_estudiante AND notas.id_materia = p_id_materia AND notas.id_carrera = p_id_carrera AND notas.fecha_inscripcion = fecha_inscripcion_cursado AND LOWER(tip.n_tipo_nota) LIKE ‘%parcial%’ AND notas.nota >= 4; cant_parciales_reprobados := cant_parciales - cant_parciales_aprobados; DBMS_OUTPUT.PUT_LINE(‘Cantidad de parciales rendidos = ‘||cant_parciales); DBMS_OUTPUT.PUT_LINE(‘Cantidad de parciales aprobados = ‘||cant_parciales_aprobados); DBMS_OUTPUT.PUT_LINE(‘Cantidad de parciales reprobados = ‘||cant_parciales_reprobados); IF cant_parciales < 2 THEN DBMS_OUTPUT.PUT_LINE(‘La cantidad rendida de parciales es menor a 2, no se cambia el estado’); ELSIF cant_parciales_aprobados >= 2 THEN BEGIN DBMS_OUTPUT.PUT_LINE(‘2 parciales aprobados, REGULAR’); UPDATE alumnos_cursando_materias SET id_estado = (SELECT id_estado FROM estados_cursados WHERE n_estado LIKE ‘Regular’) WHERE id_estudiante = p_id_estudiante AND id_materia = p_id_materia AND id_carrera = p_id_carrera AND fecha_inscripcion = fecha_inscripcion_cursado; END; ELSE BEGIN DBMS_OUTPUT.PUT_LINE( ‘Menos de 2 parciales aprobados, LIBRE’); UPDATE alumnos_cursando_materias SET id_estado = (SELECT id_estado FROM estados_cursados WHERE n_estado LIKE ‘Libre’) WHERE id_estudiante = p_id_estudiante AND id_materia = p_id_materia AND id_carrera = p_id_carrera AND fecha_inscripcion = fecha_inscripcion_cursado; END; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE(‘El alumno no se ha inscripto a la materia – carrera especifcada’); END;