Advertisement
Guest User

Untitled

a guest
Apr 16th, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 2.67 KB | None | 0 0
  1. DECLARE
  2.  
  3. CURSOR cur_empleados IS
  4. SELECT nom,apes,cod,num_dp FROM a.emp;
  5.  
  6. va_emp a.ast.cod_em%TYPE;
  7. CURSOR cur_cursos(p_emp a.ast.cod_em%TYPE) IS
  8. SELECT cod_em,cur.nom,emp FROM a.pro,a.ses,a.cur,a.ast
  9. WHERE codpro=codpro_pr AND ses.codcur_cr=codcur AND ast.codcur_cr=codcur
  10. AND cod_em=va_emp;
  11.  
  12. v_dep a.dep.nom%TYPE;
  13. v_cur cur_cursos%ROWTYPE;
  14. v_emp cur_empleados%ROWTYPE;
  15. v_numcur NUMBER(3,0);
  16. v_ncs NUMBER(3,0);
  17. v_sindep NUMBER(3,0);
  18. v_singas NUMBER(3,0);
  19. v_sincur NUMBER(3,0);
  20. v_pc NUMBER(3,0);
  21. v_gas NUMBER(6,2);
  22.  
  23. BEGIN
  24.  
  25. v_sincur:=0;
  26. v_singas:=0;
  27. v_sindep:=0;
  28.  
  29. OPEN cur_empleados;
  30. FETCH cur_empleados INTO v_emp;
  31. WHILE cur_empleados%found LOOP
  32.     DBMS_OUTPUT.put_line('Nombre: '||v_emp.nom);
  33.    
  34.     IF v_emp.num_dp IS NULL
  35.     THEN
  36.         DBMS_OUTPUT.put_line('Departamento sin asignar ');
  37.         v_sindep:=v_sindep+1;
  38.  
  39.     ELSE
  40.         SELECT nom INTO v_dep FROM a.dep
  41.         WHERE v_emp.num_dp=num;
  42.         DBMS_OUTPUT.put_line('Departamento: '||v_dep);
  43.     END IF;
  44.  
  45.     SELECT COUNT(codcur_cr) INTO v_numcur FROM a.ast
  46.     WHERE cod_em=v_emp.cod;
  47.  
  48.     IF v_numcur>0
  49.     THEN
  50.         SELECT COUNT(cer) INTO v_ncs FROM a.ast
  51.         WHERE cod_em=v_emp.cod AND cer='S';
  52.         v_pc:=100*v_ncs/v_numcur;
  53.  
  54.         SELECT SUM(imp) INTO v_gas FROM a.gas
  55.         WHERE v_emp.cod=cod_em_as;
  56.  
  57.         DBMS_OUTPUT.put_line('NΒΊ de cursos realizados:'||v_numcur);
  58.         DBMS_OUTPUT.put_line('% de certificados obtenidos:'||v_pc);
  59.  
  60.     -- Gastos del empleado. Puede haber empleados sin gastos.
  61.  
  62.         IF v_gas=0 OR v_gas IS NULL
  63.         THEN
  64.             DBMS_OUTPUT.put_line('Sin gastos de formacion');
  65.             v_singas:=v_singas+1;
  66.             ELSE
  67.             DBMS_OUTPUT.put_line('Gastos de formacion:'||v_gas);
  68.         END IF;
  69.     ELSE
  70.         DBMS_OUTPUT.put_line('No ha asistido a cursos');
  71.         v_sincur:=v_sincur+1;
  72.     END IF;
  73.  
  74.     -- Relacion de cursos y empresas
  75.     va_emp:=v_emp.cod;
  76.     OPEN cur_cursos(va_emp);
  77.     FETCH cur_cursos INTO v_cur;
  78.     WHILE cur_cursos%found LOOP
  79.        DBMS_OUTPUT.put_line('-'||v_cur.nom);
  80.        
  81.         FETCH cur_cursos INTO v_cur;
  82.  
  83.     END LOOP;
  84.     CLOSE cur_cursos;
  85.    
  86.     DBMS_OUTPUT.put_line('---------------------------------------------------------------------');
  87.  
  88.     FETCH cur_empleados INTO v_emp;
  89.  
  90. END LOOP;
  91.  
  92. DBMS_OUTPUT.put_line('Numero de empleados procesados:'||cur_empleados%rowcount);
  93. DBMS_OUTPUT.put_line('Numero de empleados sin departamento asignado:'||v_sindep);
  94. DBMS_OUTPUT.put_line('Numero de empleados sin cursos de formacion:'||v_sincur);
  95. DBMS_OUTPUT.put_line('Numero de empleados sin gastos:'||(v_singas+v_sincur));
  96.  
  97. CLOSE cur_empleados;
  98.  
  99.  
  100. END;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement