deresuroberto

PLSQL Lab 6

Nov 11th, 2016
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PL/SQL 2.71 KB | None | 0 0
  1. -- Ex. 1.b
  2. DECLARE
  3.   v_hasEmps BOOLEAN := FALSE;
  4.   v_numarAngajati INTEGER;
  5.   v_venitLunar employees.salary%TYPE;
  6.  
  7.   v_numarTotalAngajati INTEGER := 0;
  8.   v_venitTotalLunarFaraComision employees.salary%TYPE := 0;
  9.  
  10.   v_venitTotalLunar employees.salary%TYPE := 0;
  11.  
  12.   CURSOR c_job IS
  13.     SELECT job_id, job_title FROM jobs;
  14.    
  15.   CURSOR c_emps (p_job_id jobs.job_id%TYPE) IS
  16.     SELECT (last_name || ' ' || first_name) AS Name, salary, commission_pct, employee_id FROM employees
  17.     WHERE job_id = p_job_id;
  18. BEGIN
  19.   FOR v_job IN c_job LOOP
  20.      FOR v_emp IN c_emps(v_job.job_id) LOOP
  21.       v_venitTotalLunar := v_venitTotalLunar + v_emp.salary + (v_emp.salary * NVL(v_emp.commission_pct, 0));
  22.      END LOOP;
  23.   END LOOP;
  24.  
  25.   FOR v_job IN c_job LOOP
  26.     IF (c_job%ROWCOUNT > 1) THEN
  27.       DBMS_OUTPUT.PUT_LINE('');
  28.     END IF;
  29.     DBMS_OUTPUT.PUT_LINE (c_job%ROWCOUNT || '. '||v_job.job_title);
  30.     DBMS_OUTPUT.PUT_LINE('-------------------------------------');
  31.    
  32.     v_hasEmps := FALSE;
  33.     v_numarAngajati := 0;
  34.     v_venitLunar := 0;
  35.    
  36.     FOR v_emp IN c_emps(v_job.job_id) LOOP
  37.       v_hasEmps := TRUE;
  38.       v_numarAngajati := v_numarAngajati + 1;
  39.       v_venitLunar := v_venitLunar + NVL(v_emp.salary, 0);
  40.       DBMS_OUTPUT.PUT_LINE (c_emps%ROWCOUNT || '. ' || v_emp.Name || ' - ' || (v_emp.salary + (v_emp.salary * NVL(v_emp.commission_pct, 0))) ||
  41.       ' reprezentand ' || ROUND(((v_emp.salary + v_emp.salary * NVL(v_emp.commission_pct, 0)) / v_venitTotalLunar) * 100, 2) ||
  42.       '% din suma total');
  43.     END LOOP;
  44.    
  45.     IF (v_hasEmps = FALSE) THEN
  46.       DBMS_OUTPUT.PUT_LINE('No employee found!');
  47.     ELSE
  48.       v_numarTotalAngajati := v_numarTotalAngajati + v_numarAngajati;
  49.       v_venitTotalLunarFaraComision := v_venitTotalLunarFaraComision + v_venitLunar;
  50.       DBMS_OUTPUT.PUT_LINE('');
  51.       DBMS_OUTPUT.PUT_LINE('Numarul de angajati: ' || v_numarAngajati);
  52.       DBMS_OUTPUT.PUT_LINE('Valoarea lunara a veniturilor angajatilor: ' || v_venitLunar);
  53.       DBMS_OUTPUT.PUT_LINE('Valoarea medie a veniturilor angajatilor: ' || ROUND(v_venitLunar/v_numarAngajati, 2));
  54.     END IF;
  55.   END LOOP;
  56.  
  57.   DBMS_OUTPUT.PUT_LINE('');
  58.   DBMS_OUTPUT.PUT_LINE('========================================================');
  59.   DBMS_OUTPUT.PUT_LINE('');
  60.   DBMS_OUTPUT.PUT_LINE('Numarul total de angajati: ' || v_numarTotalAngajati);
  61.   DBMS_OUTPUT.PUT_LINE('Valoarea totala lunara a veniturilor angajatilor: ' || v_venitTotalLunarFaraComision);
  62.   DBMS_OUTPUT.PUT_LINE('Valoarea medie a veniturilor angajatilor: ' || ROUND(v_venitTotalLunarFaraComision/v_numarTotalAngajati, 2));
  63.   DBMS_OUTPUT.PUT_LINE('Suma totala a veniturilor si comisioanelor angajatilor: ' || ROUND(v_venitTotalLunar, 2));
  64. END;
Add Comment
Please, Sign In to add comment