SET SERVEROUTPUT ON; SET LINES 150; SET PAGES 100; /* Sa se scrie un bloc PL/SQL in care pentru un departemnt dat (ID-ul departamentului va fi dat de la tastatura) se va afisa grila salariala predominanta din acel departement si limitele salariale pentru acea grila. */ DECLARE ID_DEPT INT; GRILA_SAL INT; LO_SAL REAL; HI_SAL REAL; BEGIN ID_DEPT := &ID_DEPT; SELECT GRADE INTO GRILA_SAL FROM ( SELECT S.GRADE --grila salariala FROM DEPT D INNER JOIN EMP E ON D.DEPTNO = E.DEPTNO INNER JOIN SALGRADE S ON E.SAL BETWEEN S.LOSAL AND S.HISAL -- salariul este intre losal si hisal WHERE D.DEPTNO = ID_DEPT GROUP BY S.GRADE -- grupam dupa grila ORDER BY COUNT(S.GRADE) DESC) -- ordonam descrescator dupa numarul de aparitii pentru a avea grila predominanta WHERE ROWNUM = 1; -- grila predominanta este #1 ordonata descrescator dupa aparitii SELECT LOSAL, HISAL INTO LO_SAL, HI_SAL FROM SALGRADE WHERE GRADE = GRILA_SAL; DBMS_OUTPUT.PUT_LINE('GRILA SALARIALA PREDOMINANTA PENTRU DEPARTAMENTUL ' || ID_DEPT ||' ESTE ' || GRILA_SAL || ' AVAND LIMITELE ' || LO_SAL || ' SI ' || HI_SAL); EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('NU EXISTA DEPARTAMENT CU ID-UL' || ID_DEPT); END; / /* Sa se scrie un bloc PL/SQL in care pentru un Job dat (numele job-ului va fi dat de la tastatura) se va afisa grila salariala predominanta pentru acel job si limitele salariale pentru acea grila. */ DECLARE NUME_JOB VARCHAR2(25); GRILA_SAL INT; LO_SAL REAL; HI_SAL REAL; BEGIN NUME_JOB := &NUME_JOB; SELECT GRADE INTO GRILA_SAL FROM ( SELECT S.GRADE --grila salariala FROM EMP E INNER JOIN SALGRADE S ON E.SAL BETWEEN S.LOSAL AND S.HISAL WHERE E.JOB = NUME_JOB GROUP BY S.GRADE -- grupam dupa grila ORDER BY COUNT(S.GRADE) DESC) -- ordonam descrescator dupa numarul de aparitii pentru a avea grila predominanta WHERE ROWNUM = 1; -- grila predominanta este #1 ordonata descrescator dupa aparitii SELECT LOSAL, HISAL INTO LO_SAL, HI_SAL FROM SALGRADE WHERE GRADE = GRILA_SAL; DBMS_OUTPUT.PUT_LINE('GRILA SALARIALA PREDOMINANTA PENTRU JOBUL ' || NUME_JOB ||' ESTE ' || GRILA_SAL || ' AVAND LIMITELE ' || LO_SAL || ' SI ' || HI_SAL); EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('NU EXISTA JOB CU NUMELE' || NUME_JOB); END;