Sunteți pe pagina 1din 2

--1.

Construiți procedura Valoare_comenzi care să calculeze și să afișeze valoarea


fiecărei comenzi încheiate într-un an indicat ca parametru de intrare. Apelați
procedura.

create or replace procedure Valoare_comenzi (p_an number)


as
cursor c is select co.nr_comanda, sum(pret*cantitate) valoare_comanda
from comenzi co, rand_comenzi r
where co.nr_comanda=r.nr_comanda
and extract(year from data) = p_an
group by co.nr_comanda;
begin
for var_rec in c loop
dbms_output.put_line('Comanda '||var_rec.nr_comanda||' are valoarea '||
var_rec.valoare_comanda);
end loop;
end;
/

set serveroutput on
execute Valoare_comenzi(2000);

--2. Construiți funcția Calcul_vechime care să returneze vechimea angajatului al


cărui id este dat ca parametru de intrare.

create or replace function Calcul_vechime (p_id angajati.id_angajat%type) return


number
as
v_vechime number;
begin
select (sysdate-data_angajare)/365 into v_vechime
from angajati
where id_angajat=p_id;
return round(v_vechime);
end;
/

--3. Apelați funcția Calcul_vechime în cadrul unei proceduri, Vechime_angajati,


prin care se vor parcurge toți angajații, în scopul afișării vechimii fiecăruia.

create or replace procedure Vechime_angajati -- creare procedura care apeleaza


functia anterioara
as
cursor c is select * from angajati;
v_vechime number;
begin
for var_rec in c loop
v_vechime:=Calcul_vechime(var_rec.id_angajat); -- apelul functiei anterioare
pentru fiecare angajat parcurs prin cursor
dbms_output.put_line('Angajatul '||var_rec.id_angajat||' are vechimea '||
v_vechime);
end loop;
end;
/

execute Vechime_angajati; -- apel procedura

--4. Construiți funcția Calcul_varsta_client care să returneze varsta clientului al


cărui id este dat ca parametru de intrare. Tratați cazul în care clientul indicat
nu există.

create or replace function Calcul_varsta_client (p_id clienti.id_client%type)


return number
as
v_varsta number;
begin
select (sysdate-data_nastere)/365 into v_varsta
from clienti
where id_client=p_id;
return round(v_varsta);
exception
when no_data_found then return -1; --cazul in care nu exista clientul dat ca
parametru
end;
/

--5. Apelați funcția Calcul_varsta_client în cadrul unei proceduri,


Afisare_clienti, prin care se vor parcurge toți clienții, în scopul afișării
vârstei fiecăruia.

create or replace procedure Afisare_clienti -- creare procedura care apeleaza


functia anterioara
as
cursor c is select * from clienti;
v_varsta number;
begin
for var_rec in c loop
v_varsta:=Calcul_varsta_client(var_rec.id_client); -- apelul functiei anterioare
pentru fiecare client parcurs prin cursor
dbms_output.put_line('Clientul '||var_rec.id_client||' are varsta: '||v_varsta||'
ani');
end loop;
end;
/

execute Afisare_clienti; -- apel procedura

S-ar putea să vă placă și