0% au considerat acest document util (0 voturi)
5 vizualizări6 pagini

S4

Seminar 4 ex SGBD

Încărcat de

irinaato77
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca DOCX, PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
5 vizualizări6 pagini

S4

Seminar 4 ex SGBD

Încărcat de

irinaato77
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca DOCX, PDF, TXT sau citiți online pe Scribd

SET SERVEROUTPUT ON;

--Șterge toate produsele din categoria 'hardware3' care nu au fost niciodată comandate

--(nu apar în rand_comenzi) și afișează câte rânduri s-ar șterge,

--fără a modifica baza de date permanent.

--SQL%ROWCOUNT Câte rânduri au fost afectate de ultima comandă SQL DML executată

DECLARE

begin

delete from produse p where categorie='hardware3' and not exists

(select 1 from rand_comenzi r where p.id_produs=r.id_produs);

dbms_output.put_line('randuri sterse: '||sql%rowcount);

rollback;

dbms_output.put_line(sql%rowcount||' randuri afectate');

end;

--cursor IMPLICIT

--• Sa se stearga din tabela comenzi toate comenzile

--plasate intr-o modalitate introdusa prin

--intermediul unei variabile de substitutie.

--Afisati numarul de comenzi care au fost sterse

--folosind o variabila de mediu.

--accept creeaza o vb de substitutie

--prompt afiseaza text pe ecran


accept g_mod prompt 'Introduceti modalitatea de plasare';

declare

nr_sterse varchar2(100);

begin

delete from comenzi where modalitate='&g_mod';

nr_sterse:=to_char(sql%rowcount)|| ' comenzi sterse';

dbms_output.put_line(nr_sterse);

rollback;

end;

--cursor EXPLICIT

--Să se afișeze lista cu numele și salariul angajaților din departamentul 60:

declare

cursor ang_cursor is select id_angajat, nume, salariul from angajati

where id_departament=60;

ang_rec ang_cursor%rowtype;

begin

dbms_output.put_line('Lista cu salariile angajatilor din dep 60');

open ang_cursor;

loop

fetch ang_cursor into ang_rec;

exit when ang_cursor%notfound;

dbms_output.put_line('Salariatul '||ang_rec.nume||' are salariul:'||ang_rec.salariul);

end loop;
close ang_cursor;

end;

--cu for-loop(nu deschidem cursor, nu inchidem,nu fetch, nu declaram ang _rec)

declare

cursor ang_cursor is select id_angajat,nume,salariul from angajati

where id_departament=60;

begin

dbms_output.put_line('Lista cu salariile angajatilor din dep 60');

for ang_rec in ang_cursor

loop

dbms_output.put_line('Salariatul '||ang_rec.nume||' are salariul:'||ang_rec.salariul);

end loop;

end;

--Să se afişeze suma aferentă salariilor din fiecare departament!!

DECLARE

BEGIN

dbms_output.put_line('Total salarii pe fiecare departament:');

FOR dep_rec IN

(select d. id_departament dep, sum([Link]) sal

from angajati a, departamente d

where a.id_departament=d.id_departament

group by d.id_departament)
LOOP

dbms_output.put_line('Departamentul '||dep_rec.dep||' are de platit

salarii in valoare de: '||dep_rec.sal||' RON');

END LOOP;

END;

--EXERCITII

--Sa se stearga din tabela comenzi toate comenzile plasate intr-o modalitate

--introdusa prin intermediul unei variabile de substitutie. Afisati numarul

--de comenzi care au fost sterse folosind o variabila de mediu.

accept g_mod prompt 'Introduceti modalitatea de plasare';

declare

nr_sterse varchar2(30);

begin

delete from comenzi where modalitate='&g_mod';

nr_sterse:=to_char(sql%rowcount)||' comenzi sterse';

dbms_output.put_line(nr_sterse);

rollback;

nr_sterse:=to_char(sql%rowcount)||' afectate';

dbms_output.put_line(nr_sterse);

end;

--• Să se afişeze primele 3 comenzi care au cele mai multe produse

--comandate. În acest caz înregistrările vor fi ordonate descrescător în

--funcţie de numărul produselor comandate.


declare

begin

dbms_output.put_line('Top 3 comenzi cu cele mai multe produse comandate: ');

for com_rec in (select *from (select rc.id_comanda, sum([Link]) as total_produse

from rand_comenzi rc

group by rc.id_comanda

order by total_produse desc) where rownum<=3)

loop

DBMS_OUTPUT.PUT_LINE('Comanda ' || com_rec.id_comanda || ' are ' ||


com_rec.total_produse || ' produse comandate.');

end loop;

end;

--Utilizați un bloc PL/SQL pentru a afișa pentru fiecare departament (id,

--denumire) valoarea totală a salariilor platite angajaților.

declare

begin

dbms_output.put_line('Valoarea totala a salariilor platita de fiecare depart:');

for dep_rec in (select d.id_departament dep, sum([Link]) sal from angajati a,


departamente d

where a.id_departament=d.id_departament

group by d.id_departament)

loop

dbms_output.put_line('dep '||dep_rec.dep||' are de platit '||dep_rec.sal);

end loop;

end;
/

--Realizați un bloc PL/SQL prin care sa se afișeze pentru fiecare angajat (

--id, nume) detalii cu privire la comenzile intermediate de către acesta

--(id_comandă, data, modalitate)

declare

begin

for ang_rec in( select [Link] num,a.id_angajat id,c.id_comanda com, [Link] dt,[Link]
mod

from angajati a join comenzi c on a.id_angajat=c.id_angajat)

loop

dbms_output.put_line('Angajatul'|| ang_rec.num||'cu id ul '||ang_rec.id||' a intermediat


comanda' || ang_rec.dt);

end loop;

end;

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