Documente Academic
Documente Profesional
Documente Cultură
Bucureti
Cibernetic, Statistic i
Informatic Economic
Disciplina: SGBD
SGBD
SGBD
SGBD
email
VARCHAR2(25) unique,
telefon
VARCHAR2(20) unique,
data_angajare DATE,
salariul
NUMBER(8,2) );
create table CLIENTI
( id_client NUMBER(5),
nume_client VARCHAR2(20),
cod_fiscal VARCHAR2(15),
strada_client VARCHAR2(30),
numar_client NUMBER(5),
telefon_client VARCHAR2(15) not null,
email_client VARCHAR2(30) not null );
SGBD
SGBD
finalizata',1);
finalizata',2);
finalizata',8);
anulata',4);
finalizata',3);
finalizata',7);
finalizata',3);
anulata',4);
finalizata',3);
finalizata',2);
finalizata',1);
finalizata',9);
expediata',8);
expediata',3);
finalizata',1);
anulata',5);
SGBD
SGBD
Exerciii:
1. S se creeze o nou tabel Produse2 care s conin
aceleai produse ca i tabela iniial.
set serveroutput on
BEGIN
execute immediate 'CREATE table PRODUSE2 AS
SELECT * FROM PRODUSE';
END;
/
2. n tabela nou creat (Produse 2 ), s se adauge o coloan cu
numele Stoc. Afiai rezultatul.
DECLARE
v_sir varchar2(50);
BEGIN
v_sir:='ALTER TABLE PRODUSE2 add (Stoc number
(7))';
dbms_output.put_line (v_sir);
EXECUTE IMMEDIATE v_sir;
END;
/
select * from PRODUSE2;
SGBD
SGBD
set salariul=salariul*(1+v_procent)
where salariul < v_prag;
END;
/
5. Selectai produsele i preul acestora pentru acelea care au
preul mai mic dect preul mediu al produsului cu codul 2 fr
a utiliza comanda select.
set serveroutput on
set autoprint on
variable p_pret number
BEGIN
select avg(pret) into :p_pret
from rand_comenzi
where id_produs = 2;
END;
/
select * from rand_comenzi where pret< :p_pret;
10
SGBD
SGBD
SGBD
SGBD
set serveroutput on
DECLARE
cursor c_comenzi is
select c.nr_comanda, count(r.id_produs) numar
from comenzi c, rand_comenzi r
where c.nr_comanda=r.nr_comanda
group by c.nr_comanda
order by count(r.id_produs) desc;
rec_comenzi c_comenzi%rowtype;
BEGIN
dbms_output.put_line ('Numrul de produse pentru
fiecare comand este:');
if not c_comenzi%ISOPEN then
open c_comenzi;
end if;
loop
fetch c_comenzi into rec_comenzi;
exit when c_comenzi%NOTFOUND or c_comenzi
%ROWCOUNT>3;
dbms_output.put_line ('Comanda '||
rec_comenzi.nr_comanda||' are:
'||rec_comenzi.numar||'
produse');
end loop;
close c_comenzi;
END;
/
13. S se afieze produsele a cror cantitate total comandat
este mai mare dect o valoare introdus de la tastatur.
set serveroutput on
DECLARE
cursor c_prod (p_val number) is
select p.id_produs, p.denumire_produs, sum(r.cantitate)
total
from produse p, rand_comenzi r
where p.id_produs =r.id_produs
group by p.id_produs, p.denumire_produs
having sum(r.cantitate)>p_val
order by total desc;
v_val number(5);
14
SGBD
rec_prod c_prod%rowtype;
BEGIN
v_val:=&v_val;
dbms_output.put_line('Produsele a cror cantitate vndut este
mai mare dect '|| v_val);
if not c_prod%ISOPEN then
open c_prod (v_val);
end if;
loop
fetch c_prod into rec_prod;
exit when c_prod%notfound;
dbms_output.put_line('Din produsul '||rec_prod.id_produs||', '||
rec_prod.denumire_produs||', s-au vandut ' ||rec_prod.total||'
unitati');
end loop;
close c_prod;
END;
/
SGBD
BEGIN
select nume, prenume INTO v_nume, v_prenume
from angajati
where id_angajat=&id_angajat;
dbms_output.put_line(v_nume ||' '|| v_prenume);
EXCEPTION
when no_data_found then
dbms_output.put_line('Angajatul cu id-ul specificat, nu
exist.');
END;
/
15. S se afieze salariul angajatului cu prenumele Miruna. S
se trateze dou exceptii.
set serveroutput on
DECLARE
sal angajati.salariul%type;
BEGIN
select salariul into sal from angajati where
prenume='Miruna';
dbms_output.put_line('Miruna are salariul de: '||sal||'
RON');
EXCEPTION
when too_many_rows then
dbms_output.put_line('Exist mai muli salariai cu numele
Miruna');
when no_data_found then
dbms_output.put_line('Nu exist angajatul specificat');
END;
/
16. tergei toate nregistrrile din tabela: PRODUSE2, dup
care creai o nou tabel: ERORI care s conin valorile
SQLCODE i SQLERRM.
create table ERORI
(utilizator varchar2(40),
cod_eroare number(10),
mesaj_eroare varchar2(255)
);
DECLARE
16
SGBD
cod number;
mesaj varchar2(255);
del_exception exception;
pragma exception_init (del_exception, -2292);
BEGIN
delete from produse2;
EXCEPTION
when del_exception then
dbms_output.put_line('Produsul nu poate fi ters. ');
dbms_output.put_line('Exist comenzi n derulare. ');
cod:=SQLCODE;
mesaj:=SQLERRM;
insert into ERORI values(user, cod, mesaj);
END;
/
17. S se modifice denumirea unui produs cu id-ul introdus de
la tastatur. Tratai cte o excepie dac:
-nu exist id-ul specificat;
-apare o alt eroare.
DECLARE
invalid_prod EXCEPTION;
BEGIN
update produse
set denumire_produs='Miere nou'
where id_produs=&id_produs;
if SQL%NOTFOUND then
raise invalid_prod;
end if;
EXCEPTION
when invalid_prod then
dbms_output.put_line ('Nu exist produsul cu id-ul
specificat de dumneavoastr');
when OTHERS then
dbms_output.put_line ('A aprut o eroare. Procesul de
actualizare nu se poate realiza.');
END;
/
18. Folosind o procedur, s se modifice salariul angajatului cu
id-ul 6 ( salariul trebuie s devin cu 50% mai mare).
17
SGBD
18
SGBD
19
SGBD
20