Don't like ads? PRO users don't see any ads ;-)
Guest

Inscripcion

By: a guest on May 8th, 2012  |  syntax: PL/SQL  |  size: 3.47 KB  |  hits: 33  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. CREATE OR REPLACE TYPE MyIdRec AS TABLE OF NUMBER;
  2. CREATE OR REPLACE TYPE MyDataRec AS TABLE OF VARCHAR2(100);
  3.  
  4.  
  5. CREATE OR REPLACE
  6. PROCEDURE INSCRIPCION_MATERIAS(CODIGO INTEGER, p_id IN OUT MyIdRec, p_data IN OUT MyDataRec)
  7. IS
  8.   TYPE t_cadena IS VARRAY(100) OF VARCHAR2(100);
  9.   v_lista t_cadena:= t_cadena();
  10.  
  11.   TYPE t_codigo  IS VARRAY(100) OF INTEGER;
  12.      v_codigo  t_codigo:= t_codigo();
  13.  
  14. CARRERA INTEGER;
  15. EXISTENCIA_MATRICULA INTEGER;
  16. MATERIAS_INSCRITAS INTEGER;
  17. INDICE  NUMBER:=0;
  18. BEGIN
  19.  
  20. SELECT COUNT(*) INTO EXISTENCIA_MATRICULA FROM MATRICULAS WHERE CODALUMNO=CODIGO;
  21.  
  22. IF (EXISTENCIA_MATRICULA  = 1) THEN
  23.  
  24.         SELECT CODCARRERA INTO CARRERA FROM MATRICULAS WHERE CODALUMNO=CODIGO;
  25.    /*   SELECT COUNT(*) INTO MATERIAS_INSCRITAS FROM INSCRIPCION WHERE CODALUMNO=CODIGO;*/
  26.    
  27.      
  28.        
  29.    
  30.                 FOR I IN ( SELECT  M.CODMATERIA,M.NOMBRE_MATERIA FROM MATERIAS M INNER JOIN CICLO CI ON
  31.                 M.CODCICLO=CI.CODCICLO WHERE M.CODCARRERA=CARRERA AND M.PRE_REQUISITO=0  ORDER BY CI.CICLO ) LOOP
  32.        
  33.        INDICE:= INDICE +1 ;
  34.      
  35.         v_codigo.extend;
  36.         v_codigo(INDICE):= I.CODMATERIA;
  37.      
  38.         v_lista.extend;
  39.         v_lista(INDICE):= I.NOMBRE_MATERIA;
  40.          
  41.                         END LOOP;
  42.       p_id.DELETE;
  43.        p_data.DELETE;
  44.     FOR K IN 1..v_lista.COUNT LOOP
  45.         p_id.extend;
  46.         p_id(k) := v_codigo(K);
  47.         p_data.extend;
  48.         p_data(k) := v_lista(K);
  49.      END LOOP;
  50.      
  51.  
  52.          
  53. ELSIF (EXISTENCIA_MATRICULA > 1) THEN
  54.        
  55.             SELECT CODCARRERA INTO CARRERA FROM MATRICULAS WHERE CODALUMNO=CODIGO AND ROWNUM=1;
  56.         SELECT COUNT(*) INTO MATERIAS_INSCRITAS FROM INSCRIPCION WHERE CODALUMNO=CODIGO;
  57.                
  58.                  
  59.      IF (MATERIAS_INSCRITAS > 0) THEN
  60.          
  61.                  FOR  I_MT IN (SELECT CODINSCRIPCION FROM INSCRIPCION WHERE CODALUMNO=CODIGO)LOOP /* EXTRAYECTO MATERIAS INSCRITAS */
  62.                             /* COMPROBANDO EL ESTADO DE LAS MATERIAS APROBADA O NO APROBADA */
  63.                                 FOR I_ESTADO IN (SELECT IC.CODMATERIA, SUM(N.PROMEDIO)/ 3  AS NF FROM NOTAS N
  64.                                 INNER JOIN  INSCRIPCION IC ON N.CODINSCRIPCION = IC.CODINSCRIPCION WHERE N.CODINSCRIPCION=I_MT.CODINSCRIPCION GROUP BY IC.CODMATERIA) LOOP
  65.                
  66.                                         IF (I_ESTADO.NF >=6) THEN
  67.                                
  68.                                    FOR I_LISTA IN (SELECT CODMATERIA,NOMBRE_MATERIA FROM MATERIAS WHERE CODCARRERA=CARRERA AND PRE_REQUISITO=I_ESTADO.CODMATERIA)
  69.                                    LOOP
  70.                                    
  71.                                         INDICE:= INDICE +1 ;
  72.      
  73.                                         v_codigo.extend;
  74.                                         v_codigo(INDICE):=  I_LISTA.CODMATERIA;
  75.      
  76.                                         v_lista.extend;
  77.                                         v_lista(INDICE):=  I_LISTA.NOMBRE_MATERIA;
  78.                                  
  79.                                    
  80.                                    END LOOP;
  81.                                    
  82.                                
  83.                                
  84.                                 END IF;
  85.                                
  86.                                
  87.  
  88.                                 END LOOP;
  89.                  
  90.                  END LOOP;
  91.                  
  92.                 FOR K IN 1..v_lista.COUNT LOOP
  93.         p_id.extend;
  94.         p_id(k) := v_codigo(K);
  95.         p_data.extend;
  96.         p_data(k) := v_lista(K);
  97.                 END LOOP;
  98.                
  99.          END IF;
  100.                
  101.  
  102. END IF;
  103.  
  104. END;
  105.  
  106. CREATE OR REPLACE
  107. PROCEDURE INSCRIBIR_MT(CODIGO INTEGER,MATERIA INTEGER, CICLO INTEGER)
  108. IS
  109. EXISTE_INSCRIPCION INTEGER;
  110. BEGIN
  111.      SELECT COUNT(*) INTO EXISTE_INSCRIPCION  FROM INSCRIPCION WHERE CODALUMNO=CODIGO AND CODMATERIA=MATERIA AND CODCICLO=CICLO
  112.      AND EXTRACT(YEAR  FROM FECHA_INSCRIPCION)=EXTRACT(YEAR  FROM SYSDATE);
  113.      
  114.      IF (EXISTE_INSCRIPCION=0) THEN
  115.      
  116.            INSERT INTO INSCRIPCION(CODALUMNO,CODMATERIA,CODCICLO)VALUES(CODIGO,MATERIA,CICLO);
  117.      
  118.      END IF;
  119.  
  120. END;
  121.  
  122.  
  123.  
  124.  
  125. CREATE OR REPLACE PROCEDURE  ELIMINAR_INSCRIPCION(CODIGO INTEGER)
  126. IS
  127. BEGIN
  128.           DELETE FROM INSCRIPCION WHERE CODINSCRIPCION=CODIGO;
  129.  
  130. END;
  131. /