geofox

inscripcion materias

May 2nd, 2012
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 2.74 KB | None | 0 0
  1. CREATE OR REPLACE PROCEDURE INSCRIPCION_MATERIAS(CODIGO INTEGER, p_id IN OUT MyIdRec, p_data IN OUT MyDataRec)
  2. IS
  3.   TYPE t_cadena IS VARRAY(100) OF VARCHAR2(100);
  4.   v_lista t_cadena:= t_cadena();
  5.  
  6.   TYPE t_codigo  IS VARRAY(100) OF INTEGER;
  7.      v_codigo  t_codigo:= t_codigo();
  8.  
  9. CARRERA INTEGER;
  10. EXISTENCIA_MATRICULA INTEGER;
  11. MATERIAS_INSCRITAS INTEGER;
  12. INDICE  NUMBER:=0;
  13. BEGIN
  14.  
  15. SELECT COUNT(*) INTO EXISTENCIA_MATRICULA FROM MATRICULAS WHERE CODALUMNO=CODIGO;
  16.  
  17. IF (EXISTENCIA_MATRICULA  = 1) THEN
  18.  
  19.     SELECT CODCARRERA INTO CARRERA FROM MATRICULAS WHERE CODALUMNO=CODIGO;
  20.     SELECT COUNT(*) INTO MATERIAS_INSCRITAS FROM INSCRIPCION WHERE CODALUMNO=CODIGO;
  21.    
  22.      IF (MATERIAS_INSCRITAS = 0) THEN
  23.        
  24.    
  25.         FOR I IN ( SELECT  M.CODMATERIA,M.NOMBRE_MATERIA FROM MATERIAS M INNER JOIN CICLO CI ON
  26.         M.CODCICLO=CI.CODCICLO WHERE M.CODCARRERA=CARRERA AND M.PRE_REQUISITO=0  ORDER BY CI.CICLO ) LOOP
  27.        
  28.        INDICE:= INDICE +1 ;
  29.      
  30.         v_codigo.extend;
  31.         v_codigo(INDICE):= I.CODMATERIA;
  32.      
  33.         v_lista.extend;
  34.         v_lista(INDICE):= I.NOMBRE_MATERIA;
  35.          
  36.             END LOOP;
  37.       p_id.DELETE;
  38.        p_data.DELETE;
  39.     FOR K IN 1..v_lista.COUNT LOOP
  40.         p_id.extend;
  41.         p_id(k) := v_codigo(K);
  42.         p_data.extend;
  43.         p_data(k) := v_lista(K);
  44.      END LOOP;
  45.      
  46.    
  47.       END IF;
  48.      
  49. ELSIF (EXISTENCIA_MATRICULA > 1) THEN
  50.    
  51.         SELECT CODCARRERA INTO CARRERA FROM MATRICULAS WHERE CODALUMNO=CODIGO AND ROWNUM=1;
  52.         SELECT COUNT(*) INTO MATERIAS_INSCRITAS FROM INSCRIPCION WHERE CODALUMNO=CODIGO;
  53.        
  54.          
  55.      IF (MATERIAS_INSCRITAS > 0) THEN
  56.          
  57.          FOR  I_MT IN (SELECT CODINSCRIPCION FROM INSCRIPCION WHERE CODALUMNO=CODIGO)LOOP /* EXTRAYECTO MATERIAS INSCRITAS */
  58.                 /* COMPROBANDO EL ESTADO DE LAS MATERIAS APROBADA O NO APROBADA */
  59.                 FOR I_ESTADO IN (SELECT IC.CODMATERIA, SUM(N.PROMEDIO)/ 3  AS NF FROM NOTAS N
  60.                 INNER JOIN  INSCRIPCION IC ON N.CODINSCRIPCION = IC.CODINSCRIPCION WHERE N.CODINSCRIPCION=I_MT.CODINSCRIPCION GROUP BY IC.CODMATERIA) LOOP
  61.                
  62.                     IF (I_ESTADO.NF >=6) THEN
  63.                
  64.                    FOR I_LISTA IN (SELECT CODMATERIA,NOMBRE_MATERIA FROM MATERIAS WHERE CODCARRERA=CARRERA AND PRE_REQUISITO=I_ESTADO.CODMATERIA)
  65.                    LOOP
  66.                    
  67.                     INDICE:= INDICE +1 ;
  68.      
  69.                     v_codigo.extend;
  70.                     v_codigo(INDICE):=  I_LISTA.CODMATERIA;
  71.      
  72.                     v_lista.extend;
  73.                     v_lista(INDICE):=  I_LISTA.NOMBRE_MATERIA;
  74.                  
  75.                    
  76.                    END LOOP;
  77.                    
  78.                
  79.                
  80.                 END IF;
  81.                
  82.                
  83.  
  84.                 END LOOP;
  85.          
  86.          END LOOP;
  87.          
  88.         FOR K IN 1..v_lista.COUNT LOOP
  89.         p_id.extend;
  90.         p_id(k) := v_codigo(K);
  91.         p_data.extend;
  92.         p_data(k) := v_lista(K);
  93.         END LOOP;
  94.        
  95.      END IF;
  96.        
  97.  
  98. END IF;
  99.  
  100. END;
  101. /
Advertisement
Add Comment
Please, Sign In to add comment