0% au considerat acest document util (0 voturi)
24 vizualizări8 pagini

S3

Seminar 3 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)
24 vizualizări8 pagini

S3

Seminar 3 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;

--ATENTIE LA DIFERENTE

--ex case expression

declare

v_pret_lista produse.pret_lista%type;

begin

select pret_lista into v_pret_lista from produse

where id_produs=&p;

dbms_output.put_line('Pretul de lista initial este '||v_pret_lista);

v_pret_lista:=case

when v_pret_lista<500 then 2*v_pret_lista

when v_pret_lista between 500 and 1000 then 1.5*v_pret_lista

else 1.25*v_pret_lista

end;

dbms_output.put_line('Pretul final este '||v_pret_lista);

end;

--ex case statement

declare

v_lista produse.pret_lista%type;

begin

select pret_lista into v_lista from produse

where id_produs=&p;

case

when v_lista<500 then v_lista:=v_lista*2;


when v_lista between 500 and 1000 then v_lista:=v_lista*1.5;

else v_lista:=v_lista*1.25;

end case;

dbms_output.put_line('Pretul de lista final este '||v_lista);

end;

--EX1 Intr-un bloc Pl/SQl actualizati salariul unui angajat al carui id il citim

--de la tastatura, in functie de numarul de comenzi intermediate de acesta

--astfel:

--• Daca angajatul a intermediat intre 4 si 8 comenzi, are o crestere de 10 procente

--• Daca a intermediat mai mult de 8 comenzi, cresterea este de 20 de procente

--• Altfel nu i se modifica salariul

--Afisati numele si salariul initial, identificati si afisati numarul de

--comenzi aferent angajatului, realizati actualizarea si apoi afisati noul

--salariu primit de angajatul respectiv.

declare

v_id angajati.id_angajat%type:=&id;

v_nrcom number(3);

v_nume [Link]%type;

v_sal [Link]%type;

begin

select nume,salariul into v_nume, v_sal from angajati

where id_angajat=v_id;

dbms_output.put_line('Angajatul '||v_nume||' are salariul '||v_sal);


select count(id_angajat) into v_nrcom from comenzi where id_angajat=v_id;

v_nrcom:=case

when v_nrcom between 4 and 8 then v_sal*1.1

when v_nrcom >8 then v_sal*1.2

end;

dbms_output.put_line('Salariul final este '||v_sal);

end;

--SI CU IF

declare

v_id angajati.id_angajat%type:=&id;

v_nrcom number(3);

v_sal [Link]%type;

v_nume [Link]%type;

begin

select nume, salariul into v_nume,v_sal from angajati where id_angajat=v_id;

dbms_output.put_line('Angajatul '||v_nume||' are salariul '||v_sal);

select count(id_angajat) into v_nrcom from comenzi where id_angajat=v_id;

if v_nrcom between 4 and 8 then v_sal:=v_sal*1.1;

elsif v_nrcom>8 then v_sal:=v_sal*1.2;

end if;

dbms_output.put_line('Salariul actualizat este '||v_sal);

end;

/
--Într-un bloc PL/SQL să se parcurgă toți angajații cu id_angajat de la 100

--la 110, afișând numele și salariul acestora. (exemplificați utilizând toate

--cele 3 structuri repetitive)

set SERVEROUTPUT on;

--loop...end loop

declare

v_id angajati.id_angajat%type:=100;

v_nume [Link]%type;

v_sal [Link]%type;

begin

loop

select nume, salariul into v_nume, v_sal from angajati

where id_angajat=v_id;

dbms_output.put_line(v_id||'.Angajatul '||v_nume||' are salariul: ' ||v_sal);

v_id:=v_id+1;

exit when v_id>110;

end loop;

end;

--while..loop...end loop

declare

v_id angajati.id_angajat%type:=100;

v_nume [Link]%type;

v_sal [Link]%type;
begin

while v_id<=110

loop

select nume, salariul into v_nume, v_sal from angajati

where id_angajat=v_id;

dbms_output.put_line(v_id||'.Angajatul '||v_nume||' are salariul: ' ||v_sal);

v_id:=v_id+1;

end loop;

end;

--for..[Link] loop

declare

v_id angajati.id_angajat%type:=100;

v_nume [Link]%type;

v_sal [Link]%type;

begin

for v_id in 100..110

loop

select nume, salariul into v_nume, v_sal from angajati

where id_angajat=v_id;

dbms_output.put_line(v_id||'.Angajatul '||v_nume||' are salariul: ' ||v_sal);

end loop;

end;

-- Într-un bloc PL/SQL să se parcurgă toți angajații, afișand numele și


--salariul acestora (exemplificați utilizând toate cele trei structuri

--repetitive)

declare

v_nume [Link]%type;

v_sal [Link]%type;

v_min number(5);

v_max number(5);

begin

select min(id_angajat), max(id_angajat) into v_min, v_max from angajati;

for i in v_min..v_max

loop

select nume, salariul into v_nume, v_sal from angajati

where id_angajat=i;

dbms_output.put_line(i||'.Angajatul '||v_nume||' are salariul '||v_sal);

end loop;

end;

-- • Stergeți angajatul cu id-ul 150, folosind o comanda SQL simpla

delete from angajati where id_angajat=150;

rollback;

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