set SERVEROUTPUT on;
--[Link]ți numele și prenumele angajatului cu id-ul 100.
declare
v_nume [Link]%type;
v_prenume [Link]%type;
begin
select nume, prenume into v_nume,v_prenume from angajati where id_angajat=100;
dbms_output.put_line('Angajatul se numeste '|| v_nume||' '||v_prenume);
end;
--EX.2 Afisați numele, salariul și data angajării pentru un angajat al cărui nume se
--citește de la tastatura
declare
v_name varchar2(20);
v_salariul number not null:=0;
v_data date;
v_id number not null:=&id;
begin
select nume, salariul, data_angajare into v_name, v_salariul,v_data from angajati
where id_angajat=v_id;
dbms_output.put_line('Angajatul cu id ul '||v_id||' se numeste '||v_name||' are salariul '||
v_salariul||' si a fost angajat '||v_data);
end;
/
--varianta cu TYPE
declare
v_nume [Link]%type;
v_sal [Link]%type;
v_id angajati.id_angajat%type:=&id;
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);
end;
--EX.3 creez o tabela dupa forma produse, dar care are DOAR structura ei (de aceea avem
instructiunea mereu falsa 1=2_
--* INSEAMNA CA VREAU TOATE COLOANELE
--execute immediate, intr-un bloc pl/sql nu sunt acceptate LDD
--begin
-- execute immediate 'create table prod as select * from produse where 1=2';
-- execute immediate 'drop table prod';
--end;
--EX.4
--Să se mărească cu 100 salariul unui angajat al cărui id este citit de la
--tastatura (am adugat de la mine si afisarea)
declare
v_id angajati.id_angajat%type:=&id;
v_sal [Link]%type;
begin
update angajati
set salariul=salariul+100
where id_angajat=v_id;
select salariul into v_sal from angajati where id_angajat=v_id;
dbms_output.put_line('Angajatul cu id '||v_id||' are acum salariul '|| v_sal);
end;
--În PL/SQL, variabilele declarate într-un bloc interior NU sunt vizibile în blocurile exterioare!!
--EX.5 !!!!!
--Sa se afiseze numele, venitul total si vechimea angajatului citit de la
--tastatura.
--explicatii:
--Dar dacă pui:NVL(comision, 0)
--→ înseamnă: dacă comision e NULL, folosește 0 în locul lui.
--Cum funcționează:
--MONTHS_BETWEEN(SYSDATE, data_angajare) → calculează numărul de luni între azi
(SYSDATE) și ziua în care angajatul a fost angajat.
--
--Apoi împărțim la 12 → transformăm lunile în ani.
--
--TRUNC(...) → păstrăm doar partea întreagă (eliminăm zecimalele).
declare
v_nume varchar2(30);
v_venit number not null:=0;
v_vechime number not null:=0;
v_id angajati.id_angajat%type:=&id;
begin
select nume, salariul+NVL(comision,0),TRUNC(MONTHS_BETWEEN(SYSDATE,data_angajare)/
12)
into v_nume, v_venit, v_vechime from angajati
where id_angajat=v_id;
dbms_output.put_line('Angajatul '||v_nume||' are venitul total '||v_venit||' si o vechime
in ani de '||v_vechime||' ani.');
end;
--EX 6
--. Sa se mareasca salariul angajatului citit de la tastatura
--– se preiau info despre angajatul respectiv
--– se mareste salariul cu 100 intr-o variabila
--– se modifica salariul angajatului
declare
v_nume [Link]%type;
v_salariul [Link]%type;
v_id angajati.id_angajat%type:=&id;
begin
update angajati
set salariul=salariul+100 where id_angajat=v_id;
select nume, salariul into v_nume, v_salariul from angajati
where id_angajat=v_id;
dbms_output.put_line('Angajatul se numeste '||v_nume||' are salariul '||v_salariul);
end;
--tipul RECORD
--Utilizând un tip de dată înregistrare definit de utilizator, să se afișeze preţul
--minim al produsului cu codul 3133.
DECLARE
TYPE tip_produse is record
(v_cod produse.id_produs%type, v_den produse.denumire_produs%type, v_pret_min
produse.pret_min%type);
vrec_prod tip_produse;
begin
select id_produs, denumire_produs,pret_min into vrec_prod from produse
where id_produs=3133;
dbms_output.put_line('Produsul '||vrec_prod.v_den||' are pretul '||vrec_prod.v_pret_min);
end;