/* Sa se scrie o functie care calculeaza impozitul pe venit in functie de numele jobului , folosindu-se de urmatorul algoritm: Daca numele job-ului contine litera 'A' in interior atunci impozitul este 10% din venit Daca numele job-ului contine litera 'E' in interior atunci impozitul este 25% din venit Daca le contine pe amandoua in interior atunci impozitul este 20% din venit Altfel nu are :). Sa se scrie o procedura care primeste ca parametru de intrare un departament si afiseaz numele angajatilor din acel departament, daca sunt manageri sau nu, job-ul lor si impozitul. */ SET serveroutput ON; CREATE OR REPLACE FUNCTION F_IMPOZIT_PER_JOB( ID_ANG IN NUMBER) RETURN NUMBER AS VAL_IMPOZIT NUMBER := 0; NUME_JOB EMP.JOB%TYPE; VENIT_ANG EMP.SAL%TYPE; BEGIN SELECT JOB, SAL + NVL(COMM, 0) INTO NUME_JOB, VENIT_ANG FROM EMP WHERE EMPNO = ID_ANG; IF REGEXP_LIKE(UPPER(NUME_JOB), '.+A.*E.+') THEN VAL_IMPOZIT := VENIT_ANG * 0.2; ELSE IF REGEXP_LIKE(UPPER(NUME_JOB), '.+A.+') THEN VAL_IMPOZIT := VENIT_ANG * 0.1; ELSE IF REGEXP_LIKE(UPPER(NUME_JOB), '.+E.+') THEN VAL_IMPOZIT := VENIT_ANG * 0.25; END IF; END IF; END IF; RETURN VAL_IMPOZIT; END; / CREATE OR REPLACE PROCEDURE P_CALCUL_DEPT( ID_DEPT IN NUMBER) AS BEGIN dbms_output.Put_line(Rpad('NUME ANGAJAT', 15) || Rpad('ESTE MANAGER', 15) || Rpad('NUME JOB', 10)|| Rpad('VENIT', 10) || Rpad('IMPOZIT', 10)); dbms_output.Put_line(Rpad('*', 70, '*')); FOR angajat IN (SELECT E.ENAME, CASE WHEN EXISTS (SELECT MGR FROM EMP WHERE MGR = E.EMPNO ) THEN 'ESTE' ELSE 'NU ESTE' END EMANAGER, E.JOB, F_IMPOZIT_PER_JOB(E.EMPNO) IMPOZIT, SAL + NVL(COMM, 0) VENIT FROM EMP E WHERE DEPTNO = ID_DEPT ) LOOP dbms_output.Put_line(Rpad(angajat.ename, 15) || Rpad(angajat.EMANAGER, 15) || Rpad(angajat.job, 10)|| Rpad(angajat.VENIT, 10) || Rpad(angajat.IMPOZIT, 10)); END LOOP; END; / BEGIN P_CALCUL_DEPT(20); END;