CREATE OR REPLACE TYPE MyIdRec AS TABLE OF NUMBER;
CREATE OR REPLACE TYPE MyDataRec AS TABLE OF VARCHAR2(100);
CREATE OR REPLACE
PROCEDURE INSCRIPCION_MATERIAS(CODIGO INTEGER, p_id IN OUT MyIdRec, p_data IN OUT MyDataRec)
IS
TYPE t_cadena IS VARRAY(100) OF VARCHAR2(100);
v_lista t_cadena:= t_cadena();
TYPE t_codigo IS VARRAY(100) OF INTEGER;
v_codigo t_codigo:= t_codigo();
CARRERA INTEGER;
EXISTENCIA_MATRICULA INTEGER;
MATERIAS_INSCRITAS INTEGER;
INDICE NUMBER:=0;
BEGIN
SELECT COUNT(*) INTO EXISTENCIA_MATRICULA FROM MATRICULAS WHERE CODALUMNO=CODIGO;
IF (EXISTENCIA_MATRICULA = 1) THEN
SELECT CODCARRERA INTO CARRERA FROM MATRICULAS WHERE CODALUMNO=CODIGO;
/* SELECT COUNT(*) INTO MATERIAS_INSCRITAS FROM INSCRIPCION WHERE CODALUMNO=CODIGO;*/
FOR I IN ( SELECT M.CODMATERIA,M.NOMBRE_MATERIA FROM MATERIAS M INNER JOIN CICLO CI ON
M.CODCICLO=CI.CODCICLO WHERE M.CODCARRERA=CARRERA AND M.PRE_REQUISITO=0 ORDER BY CI.CICLO ) LOOP
INDICE:= INDICE +1 ;
v_codigo.extend;
v_codigo(INDICE):= I.CODMATERIA;
v_lista.extend;
v_lista(INDICE):= I.NOMBRE_MATERIA;
END LOOP;
p_id.DELETE;
p_data.DELETE;
FOR K IN 1..v_lista.COUNT LOOP
p_id.extend;
p_id(k) := v_codigo(K);
p_data.extend;
p_data(k) := v_lista(K);
END LOOP;
ELSIF (EXISTENCIA_MATRICULA > 1) THEN
SELECT CODCARRERA INTO CARRERA FROM MATRICULAS WHERE CODALUMNO=CODIGO AND ROWNUM=1;
SELECT COUNT(*) INTO MATERIAS_INSCRITAS FROM INSCRIPCION WHERE CODALUMNO=CODIGO;
IF (MATERIAS_INSCRITAS > 0) THEN
FOR I_MT IN (SELECT CODINSCRIPCION FROM INSCRIPCION WHERE CODALUMNO=CODIGO)LOOP /* EXTRAYECTO MATERIAS INSCRITAS */
/* COMPROBANDO EL ESTADO DE LAS MATERIAS APROBADA O NO APROBADA */
FOR I_ESTADO IN (SELECT IC.CODMATERIA, SUM(N.PROMEDIO)/ 3 AS NF FROM NOTAS N
INNER JOIN INSCRIPCION IC ON N.CODINSCRIPCION = IC.CODINSCRIPCION WHERE N.CODINSCRIPCION=I_MT.CODINSCRIPCION GROUP BY IC.CODMATERIA) LOOP
IF (I_ESTADO.NF >=6) THEN
FOR I_LISTA IN (SELECT CODMATERIA,NOMBRE_MATERIA FROM MATERIAS WHERE CODCARRERA=CARRERA AND PRE_REQUISITO=I_ESTADO.CODMATERIA)
LOOP
INDICE:= INDICE +1 ;
v_codigo.extend;
v_codigo(INDICE):= I_LISTA.CODMATERIA;
v_lista.extend;
v_lista(INDICE):= I_LISTA.NOMBRE_MATERIA;
END LOOP;
END IF;
END LOOP;
END LOOP;
FOR K IN 1..v_lista.COUNT LOOP
p_id.extend;
p_id(k) := v_codigo(K);
p_data.extend;
p_data(k) := v_lista(K);
END LOOP;
END IF;
END IF;
END;
CREATE OR REPLACE
PROCEDURE INSCRIBIR_MT(CODIGO INTEGER,MATERIA INTEGER, CICLO INTEGER)
IS
EXISTE_INSCRIPCION INTEGER;
BEGIN
SELECT COUNT(*) INTO EXISTE_INSCRIPCION FROM INSCRIPCION WHERE CODALUMNO=CODIGO AND CODMATERIA=MATERIA AND CODCICLO=CICLO
AND EXTRACT(YEAR FROM FECHA_INSCRIPCION)=EXTRACT(YEAR FROM SYSDATE);
IF (EXISTE_INSCRIPCION=0) THEN
INSERT INTO INSCRIPCION(CODALUMNO,CODMATERIA,CODCICLO)VALUES(CODIGO,MATERIA,CICLO);
END IF;
END;
CREATE OR REPLACE PROCEDURE ELIMINAR_INSCRIPCION(CODIGO INTEGER)
IS
BEGIN
DELETE FROM INSCRIPCION WHERE CODINSCRIPCION=CODIGO;
END;
/