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; /