Download as txt, pdf, or txt
Download as txt, pdf, or txt
You are on page 1of 3

SET SERVEROUTPUT ON

SET VERIFY OFF

CREATE OR REPLACE PACKAGE bonus


IS
nu_exista EXCEPTION ;
FUNCTION verifica_angajat(p_id IN angajati.id_angajat%type) RETURN boolean;
PROCEDURE afiseaza_angajat(p_id IN angajati.id_angajat%type);
FUNCTION val_comenzi_angajat(p_id IN angajati.id_angajat%type) RETURN number;
PROCEDURE mareste_salariu(p_ID IN angajati.id_angajat%type , p_salariu OUT
number);
END;
/
CREATE OR REPLACE PACKAGE BODY bonus
IS
FUNCTION verifica_angajat(p_id IN angajati.id_angajat%type) RETURN boolean
IS
nr NUMBER ;
BEGIN
SELECT COUNT (id_angajat) INTO nr FROM angajati WHERE id_angajat = p_id ;
IF nr=1 THEN
RETURN true ;
else
RETURN false;
end if ;
END;

PROCEDURE afiseaza_angajat(p_id IN angajati.id_angajat%type)


IS
v_nume angajati.nume%type;
v_venit NUMBER;
-- nu_este EXCEPTION;
BEGIN
IF verifica_angajat(p_id) = true THEN
SELECT nume , salariul+salariul*NVL(comision , 0)
INTO v_nume , v_venit
FROM angajati WHERE id_angajat=p_id;
dbms_output.put_line('Angajatul ' ||v_nume|| ' are venitul total '||v_venit);
ELSE
Raise nu_exista;
end if;
EXCEPTION
when nu_exista then
dbms_output.put_line('Nu exista niciun angajat cu id-ul ' || p_id);
END ;

FUNCTION val_comenzi_angajat(p_id IN angajati.id_angajat%type) RETURN number


IS
p_valoare NUMBER ;
--nu_este EXCEPTION;
BEGIN
IF verifica_angajat(p_id) = true THEN
SELECT SUM(cantitate*pret) INTO p_valoare FROM comenzi c , rand_comenzi rc
WHERE c.id_comanda =id_comanda AND id_angajat=p_id;
RETURN NVL(p_valoare,0);
ELSE
RAISE nu_exista;
END IF;
EXCEPTION
WHERE nu_exista THEN
RETURN -1;
END;

PROCEDURE mareste_salariu(p_ID IN angajati.id_angajat%type , p_salariu OUT number)


IS
v_marire number;
BEGIN
IF verifica_angajat (p_id) = true THEN
CASE
WHEN val_comenzi_angajat(p_id) between 1 and 10000 THEN v_marire:=100;
WHEN val_comenzi_angajt(p_id) >10000 THEN v_marire:=500
else v_marire:=0;
end case;

UPDATE angajati
SET salariu= salariul+v_marire
WHEN id_angajat = p_id
RETURNING salariul INTO P_salariu ;
ELSE
RAISE nu_exista;
END IF;
EXCEPTION
WHEN nu_exista THEN
dbms_output.put_line('Nu exista niciun angajat cu id-ul ' || p_id);
END;
/

EXECUTE bonus.afiseaza_angajat(100);

You might also like