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;