Documente Academic
Documente Profesional
Documente Cultură
Proiect SGBD
Bucuresti
2018
Această baza de date are ca scop gestionarea resurselor unei bănci. Se stochează
informații despre bancă și se permite accesarea și ștergerea lor, dar și adăugarea de noi
înregistrări și generarea de rapoarte.
Baza de date conține 8 tabele:
Stergerea coloanei id_locatie din filiale si adaugarea ei din nou cu restrictia unique si not null
pentru a forma relatia de 1-1
1. Sa se modifice rata bancara a creditului cu id-ul 1. Atunci cand rata este mai mare de
300 se va scadea din aceasta o constanta =10. Altfel se va aduna o constanta egala cu
10.
declare
c_cota number:=10;
v_rata credite.rata%type;
begin
DECLARE
c_i number:=5;
v_i number:=0;
v_nume clienti.nume%type;
v_prenume clienti.prenume%type;
begin
while v_i<c_i loop
v_i:=v_i+1;
select nume,prenume into v_nume,v_prenume
from clienti
where id_client=v_i;
dbms_output.put_line('Clientul '|| v_nume||' ' || v_prenume);
end loop;
end;
3. Sa se afiseze numele si primilor 2 angajati care au salariul mai mare de 2500.
declare
v_nume angajati.nume%type;
v_prenume angajati.prenume%type;
begin
for i in 1..2 loop
select nume, prenume into v_nume,v_prenume from angajati where salariul>2500 and
id_angajat=i;
dbms_output.put_line(v_nume || ' '|| v_prenume);
end loop;
end;
4. Sa se afiseze primii 5 clienti
declare
c_i constant number :=5;
v_i number:=0;
v_nume clienti.nume%type;
v_prenume clienti.prenume%type;
begin
while v_i<c_i loop
v_i:=v_i+1;
select nume,prenume into v_nume,v_prenume
from clienti
where id_client=v_i;
dbms_output.put_line('Clientul '|| v_nume||' ' || v_prenume);
end loop;
end;
IV. Tratarea exceptiilor
declare
v_nume angajati.nume%type;
v_prenume angajati.prenume%type;
begin
for i in 1..3 loop
select nume, prenume into v_nume,v_prenume from angajati where salariul>2500 and
id_angajat=i;
dbms_output.put_line(v_nume || ' '|| v_prenume);
end loop;
exception
end;
2. Sa se afiseze un mesaj pentru exceptia too_many_rows
declare
v_sal angajati.salariul%type;
begin
exception
when too_many_rows then
dbms_output.put_line('Prea multe randuri');
end;
3. Sa se creeze exceptia exc_filiale care se executa atunci cand incercam sa inseram
valori in tabela filiale fara sa se mentioneze adresa.
declare
exc_filiale exception;
pragma exception_init (exc_filiale,-20000);
begin
insert into filiale(id_filiala,numar_angajati) values(9,2);
raise exc_filiale;
exception
when exc_filiale
then
dbms_output.put_line('Nu ati mentionat adresa');
end;
4. Sa se creeze o exceptie ce se executa atunci cand se incearca stergerea din angajati.
declare
cod number;
del_exception exception;
PRAGMA EXCEPTION_INIT(del_exception, -2292);
begin
delete from angajati;
EXCEPTION
WHEN del_exception THEN
dbms_output.put_line('Nu puteti sterge angajati fara permisiune.');
cod:=SQLCODE;
declare
cursor n is select nume,salariul from angajati;
v_nume angajati.nume%type;
v_salariul angajati.salariul%type;
begin
open n;
loop
fetch n into v_nume, v_salariul;
exit when n%notfound;
dbms_output.put_line('Salariatul ' || v_nume || ' castiga ' || v_salariul);
end loop;
close n;
end;
2. Sa se afiseze lista cu numele si salariile angajatilor din departamentul 1.
DECLARE
cursor ang_cursor is select id_angajat, nume, salariul from angajati where id_departament=1;
ang_id angajati.id_angajat%type;
ang_nume angajati.nume%type;
ang_sal angajati.salariul%type;
BEGIN
dbms_output.put_line('Lista cu salariariile angajatilor din departamentul 1');
open ang_cursor;
loop
fetch ang_cursor into ang_id, ang_nume, ang_sal;
exit when ang_cursor%notfound;
dbms_output.put_line('Salariatul '||ang_nume||' are salariul: '||ang_sal);
end loop;
close ang_cursor;
end;
3. Sa se afiseze numele tuturor angajatilor.
declare
v_id angajati.id_angajat%type;
v_nume angajati.nume%type;
cursor c1 is select id_angajat, nume from angajati;
BEGIN
open c1;
for i in 1..5 LOOP
fetch c1 into v_id, v_nume;
dbms_output.put_line(v_nume);
end loop;
close c1;
end;
4. Sa se foloseasca un cursor cu parametri pentru a afisa toti angajatii ce au salariul mai
mare decat o valoare data.
declare
cursor c_ang (p_val number) IS
select nume, prenume, salariul
from angajati
where salariul>p_val
order by salariul desc;
loop
fetch c_ang into v_ang;
exit when c_ang %notfound;
DBMS_OUTPUT.PUT_LINE(v_ang.nume || ' ' || v_ang.salariul);
end loop;
close c_ang;
end;
VI. Functii, procedure, includerea lor in pachete.
CREATE OR REPLACE
PROCEDURE modifica_dobanda_credit
(p_id_credit IN credite.id_credit%type, procent IN number)
IS
v_dobanda credite.dobanda%type;
BEGIN
select dobanda into v_dobanda from credite where id_credit=p_id_credit;
dbms_output.put_line('Creditul are dobanda: '||v_dobanda);
update credite
set dobanda=procent
where id_credit=p_id_credit;
select dobanda into v_dobanda from credite where id_credit=p_id_credit;
dbms_output.put_line('Noua dobanda '||v_dobanda);
END;
///////
CREATE OR REPLACE
PROCEDURE modifica_dobanda_depozit
(p_id_depozit IN depozite.id_depozite%type, procent IN number)
IS
v_dobanda depozite.dobanda%type;
BEGIN
select dobanda into v_dobanda from depozite where id_depozite=p_id_depozit;
dbms_output.put_line('Depozitul are dobanda: ' || v_dobanda);
update depozite
set dobanda=procent
where id_depozite=p_id_depozit;
select dobanda into v_dobanda from depozite where id_depozite=p_id_depozit;
dbms_output.put_line('Noua dobanda '||v_dobanda);
END;
2. Sa se realizeze 3 functii care calculeaza suma de plata in cazul unui credit, vechimea
unui depozit si verificarea salariului daca este mai mic sau mai mare decat 1300.
///////
///////
3. Sa se realizeze un pachet banca care sa contina toate functiile si procedurile de mai sus
VII. Declansatori