Sunteți pe pagina 1din 19

Baza de date creata vanzarea biletelor la diferite concerte prin agentiile de vanzare de

bilete. Are in componenta trei tabele (concert,formatie,agentie,comenzi si client).


Tabelele concert si formatie sunt legate intre ele prin codconcert,tipul de legatura
dintre ele fiind 1 la la m ; tabelele concert si agentie sunt legate prin codconcert, legatura
fiinf m la m ; tabelele agentie si comenzi au o legatura d tip m la m ,fiinf legate prin
codcomanda, iar tabelele clienti si comenzi sunt legate prin id_client si prezinta o
legatura de tip 1 la m.
FORMATIE
codformatie numeformatie nr_artisti tarif gen_muzical
Codconcer
t

CONCERT
codconcert locatie data_concert nr_bilete durata pret

AGENTIE
codagentie nr_bilete codconcert
codcomand
a

COMENZI
codcomanda cantitate id_client pret

CLIENTI
id_client nume_client prenume_client
D!" TAB#$ concert %A&%AD$ %!'&TA('T&;
D!" TAB#$ formatie %A&%AD$ %!'&TA('T&;
D!" TAB#$ agentie %A&%AD$ %!'&TA('T&;
D!" TAB#$ comenzi %A&%AD$ %!'&TA('T&;
D!" TAB#$ client %A&%AD$ %!'&TA('T&;
create table concert
(codconcert number()) constraint "*e+_concert primar+ ,e+,
locatie varc-ar.(./) not null,
data_concert date,
nr_bilete number(1/),
durata number(0),
pret number(1/));
create table formatie
(codformatie number()),
1
numeformatie varc-ar.(.0) not null,
nr_artisti number(.),
tarif number(1/),
codconcert number()) not null,
gen_muzical varc-ar.(1/));
alter table formatie add constraint p,_agnt primar+ ,e+(codformatie);
create table agentie
(codagentie number(1) constraint p,_comenzi primar+ ,e+,
codconcert number()) not null,
codcomanda number()) not null,
nr_bilete number(1/),
%!'&TA('T 2*_concert 2!$(3' *$4 (codconcert) $2$$'%$&
concert(codconcert));
create table comenzi
(codcomanda number()) not null,
codclient number()) not null,
cod_concert number()) not null,
cantitate number(1),
nrcom number(5));
%reate table client
(id_client number(5) not null,
nume_client varc-ar.(./),
prenume_client varc-ar.(./),
nrcom number(1) not null);
alter table comenzi add constraint p,_codcomanda primar+ ,e+ (codcomanda);
alter table client add constraint p,_idclient primar+ ,e+ (id_client);
alter table agentie modif+ (codcomanda number()));
alter table agentie add constraint 2*_comenzi 2!$(3' *$4 (codcomanda)
$2$$'%$& comenzi(codcomanda);
alter table formatie add %!'&TA('T 2*_concrt 2!$(3' *$4 (codconcert)
$2$$'%$& concert(codconcert);
alter table comenzi add id_client number(5);
alter table comenzi add constraint f,_idclient foreign ,e+(id_client) references
client(id_client);
alter table comenzi add constraint c,_cant c-ec, (cantitate6/);
alter table client add varsta number());
alter table client set unused column varsta;
alter table client drop unused column;
.
insert into concert values (1//,7sala palatului7,to_date(7118/98.//17,7DD8::8
44447),.///,7.-7,10///);
insert into concert values (1/1,7parcul izvor7,to_date(71.8/58.//07,7DD8::8
44447),0//,7)-7,/);
insert into concert values (11/,7sala parlamentului7,to_date(7/081.8.//17,7DD8::8
44447),.0//,71-)/7,0/////);
insert into concert values (1./,7palatului copiilor7,to_date(7./8/18.//57,7DD8::8
44447),1///,71-7,5////);
insert into concert values (1)/,7parcul izvor7,to_date(7118/98.//;7,7DD8::8
44447),0//,7)/min7,1////);
insert into concert values (11/,7sala palatului7,to_date(71;8/08.//97,7DD8::8
44447),)///,7.-7,0//);
insert into concert values (10/,7palatul copiilor7,to_date(7.081.8.//57,7DD8::8
44447),1//,71-7,/);
insert into concert values (15/,7sala parlamentului7,to_date(7/)8/58.//07,7DD8::8
44447),19//,71-7,10////);
insert into concert values (.//,7parcul izvor7,to_date(7118118.//17,7DD8::8
44447),1///,71/min7,1///);
insert into concert values (.1/,7sala palatului7,to_date(7./8/18.//;7,7DD8::8
44447),.5//,7.-./7,.0////);
insert into concert values (.0/,7sala parlamentului7,to_date(7/18/.8.//07,7DD8::8
44447),100/,71-1/7,;0///);
insert into concert values ()//,7parcul izvor7,to_date(7158/18.//;7,7DD8::8
44447),1.//,7)-7,/);
insert into formatie values (/1,7compact7,0,1////,1//,7roc,7);
insert into formatie values (/.,7andreea balan7,1,)////,1/1,7pop7);
insert into formatie values (/),7pin,7,1,1/////,11/,77);
insert into formatie values (/1,7blond+7,.,.//// ,1./,7pop7);
insert into formatie values (/0,7vita de vie7,),.0///,11/,7roc,7);
insert into formatie values (1/,7sistem7,5,0/0//,10/,7 7);
insert into formatie values (11,7mandinga7,11,.////,15/,7latino7);
insert into formatie values (10,7elena7,1,./// ,.//,7pop7);
insert into formatie values (./,7blond+7, .,/ , .0/,7 7);
insert into client values (//1//0,7matei7,7simona7);
)
insert into client values (//1/1/,7stefan7,7maria7);
insert into client values (//1/10,7marin7,7florin7);
insert into client values (//1/./,7stoica7,7ana7);
insert into client values (//1//1,7vasile7,7ion7);
insert into client values (//1//.,7constantinescu7,7maria7);
insert into client values (//1//),7baciu7,7florin7);
insert into client values (//1//1,7nastase7,7raluca7);
insert into comenzi values ()//,0,//1//1,)////);
insert into comenzi values ()1/,.,//1//0,1////);
insert into comenzi values ()./,1/,//1/1/,.)///);
insert into comenzi values ())/,1,//1//.,0///);
insert into comenzi values ()1/,),//1//),<////);
insert into comenzi values ()0/,5,//1/10,1////);
insert into comenzi values ()5/,1.,//1/./,1/////);
insert into comenzi values ();/,<,//1//1,00///);
insert into agentie values (1///,1//,)//,.///);
insert into agentie values (11//,1/1,)0/,0//);
insert into agentie values (1.//,1./,)5/,1///);
insert into agentie values (1)//,1)/,);/,0//);
insert into agentie values (11//,11/,))/,)///);
insert into agentie values (10//,15/,)1/,19//);
insert into agentie values (15//,.1/,)1/,.5//);
1
0
5
;
1. . Folosind un cursor sa se afiseze formatiile si totalul biletelor vandute de
formatie.
declare
cursor c1 is select numeformatie, sum(nr_bilete) total from formatie f, concert c
=-ere f.codconcert>c.codconcert
group b+ numeformatie;
begin
for rec_formatie in c. loop
dbms_output.put_line(rec_formatie.numeformatie ?? 7 a vandut 7 ??rec_formatie.total ?? 7
bilete7);
end loop;
end;
rezultat@
mandinga a vandut 1800 bilete
compact a vandut 2000 bilete
blondy a vandut 2550 bilete
andreea balan a vandut 500 bilete
elena a vandut 1000 bilete
pink a vandut 2500 bilete
vita de vie a vandut 3000 bilete
sistem a vandut 100 bilete
2. Sa se afiseze ultimele 5 concerte care au avut loc, folosind un cursor.
declare v_data concert.data_concertAt+pe;
v_nume concert.locatieAt+pe;
cursor c1 is select data_concert,locatie from concert order b+ data_concert desc ;
begin
open c1;
for i in 1..0
loop
fetc- c1 into v_data,v_nume;
eBit =-en c1Anotfound;
dbms_output.put_line(v_data ?? C C ??v_nume);
end loop;
close c1;
end;
rezultat@
17-MAY-08 sala palatului
1-A!"-07 parcul i#vor
20-A$%-07 sala palatului
1&-A$%-07 parcul i#vor
25-'()-0& palatul copiilor
9
3. Sa se afiseze preturile biletelor crescator ,locatia si formatia care canta.
begin
for rec_pret in (select pret_bilete,locatie,numeformatie from concert c,formatie f =-ere
c.codconcert>f.codconcert order b+ 1)
loop
dbms_output.put_line(rec_pret.pret_bilete ?? 7 lei,la 7 ??rec_pret.locatie ??7 canta 7 ??
rec_pret.numeformatie);
end loop;
end;
rezultat@
0 lei*la palatul copiilor canta sistem
0 lei*la parcul i#vor canta andreea balan
500 lei*la sala palatului canta vita de vie
1000 lei*la parcul i#vor canta elena
5000 lei*la sala palatului canta compact
&0000 lei*la palatului copiilor canta blondy
75000 lei*la sala parlamentului canta blondy
150000 lei*la sala parlamentului canta mandinga
500000 lei*la sala parlamentului canta pink
4. Sa se afiseze genul musical si formatia care canta, in functie de locatia introdusa
de la tastatura.
declare
cursor c1 (loc varc-ar.) is select locatie,gen_muzical,numeformatie from concert c,
formatie f =-ere c.codconcert>f.codconcert and locatie>loc;
rec_ang c1Aro=t+pe;
v_loc varc-ar.()/);
begin
v_loc@>7sala palatului7;
open c1(v_loc);
loop
fetc- c1 into rec_ang;
eBit =-en c1Anotfound;
dbms_output.put_line(rec_ang.locatie ?? 7 7 ??rec_ang.gen_muzical ?? 7 7 ??
rec_ang.numeformatie);
end loop;
close c1;
end;
<
rezultat@
sala palatului rock compact
sala palatului rock vita de vie
parcul i#vor pop andreea balan
parcul i#vor pop (lena
sala parlamentului pink
sala parlamentului latino mandinga
sala parlamentului blondy
5. Sa se afiseze numele si prenumele clientilor care au dat o comanda mai mare de 5
bilete.
begin
for rec_client in (select nume_client,prenume_client from client =-ere id_client in (select
id_client from comenzi =-ere cantitate60))
loop
dbms_output.put_line ( rec_client.nume_client ?? 7 7 ?? rec_client.prenume_client );
end loop;
end;
rezultat@
nastase raluca
ste+an maria
marin +lorin
stoica ana
6. Pentru concertele dintro locatie data de la tastatura, sa se mareasca numarul
biletelor cu 1!".
create or replace procedure nr_bilete (loc in concert.locatieAt+pe)
as begin
update concert set nr_bilete>nr_bileteD1.1/ =-ere locatie>loc;
end nr_bilete;
declare v_loc varc-ar.(./);
begin
v_loc@>7AparcA7;
nr_bilete(v_loc);
end;

#. Sa se afiseze numele si prenumele unui client care a dat o comanda si a se trateze
e$ceptiile care pot aparea.
1/
declare
eBc eBception;
v_nume client.nume_clientAt+pe;
v_pren client.prenume_clientAt+pe;
begin
select nume_client,prenume_client into v_nume,v_pren from client =-ere id_client in
(select id_client from comenzi =-ere codcomanda>1//);
dbms_output.put_line (v_nume ?? 7 7 ?? v_pren);
eBception =-en no_data_found t-en dbms_output.put_line (7'u eBista acest client7);
end;
vasile ion
%. Pentru un an dat de la tastatura,sa se afiseze detalii despre concertele din acel an.
declare
cursor c1(an number) is select locatie,nr_bilete,durata from concert =-ere eBtract (+ear
from data_concert) >an;
rec_an c1Aro=t+pe;
v_an number;
begin
v_an@>.//1;
open c1(v_an);
loop
fetc- c1 into rec_an;
eBit =-en c1Anotfound;
dbms_output.put_line(7(n anul 7 ?? v_an ?? 7 la 7 ?? rec_an.locatie ?? 7 s8au vandut@ 7 ??
rec_an.nr_bilete ?? 7 bilete si concertul a durat@ 7 ?? rec_an.durata);
end loop;
close c1;
end;
rezultat@
,n anul 200 la sala palatului s-au vandut- 2000 bilete si concertul a durat- 2.
,n anul 200 la sala parlamentului s-au vandut- 2500 bilete si concertul a durat- 1.30
,n anul 200 la parcul i#vor s-au vandut- 1100 bilete si concertul a durat- 0min
,n anul 2007 la parcul i#vor s-au vandut- 550 bilete si concertul a durat- 30min
,n anul 2007 la sala palatului s-au vandut- 2&00 bilete si concertul a durat- 2.20
,n anul 2007 la parcul i#vor s-au vandut- 1320 bilete si concertul a durat- 3.
&. Sa se stabileasca tariful formatiilor,in functie de numarul de artisti din care sunt
formate.
11
create or replace function tarife (nr_art number) return number
is
v_tarif formatie.tarifAt+pe;
begin
select tarif into v_tarif from formatie;
v_tarif @> case =-en nr_art >1 t-en 1///
=-en nr_art>. t-en .///
=-en nr_art>) t-en )///
else 1/// end;
return v_tarif;
end tarife;
1!.Sa se creeze o functie care pe baza codului de comanda,sa afiseze numarul de
bilete comandate.
create or replace function comanda(id comenzi.codcomandaAt+pe)
return number
is
v_cant comenzi.cantitateAt+pe;
begin
select cantitate into v_cant from comenzi =-ere codcomanda>id;
return v_cant;
eBception
=-en no_data_found t-en return null;
end;
declare
v_id comenzi.codcomandaAt+pe;
v_com number;
begin
v_id@>7)./7;
dbms_output.put_line (7 acest client a comandat@ 7);
v_com@>comanda(v_id);
dbms_output.put_line (v_com ?? 7 bilete7 );
end;
rezultat@
acest client a comandat-
10 bilete
11.Se da un nume de la tastatura.Sa se afle daca e$ista vreun client cu acest nume.

create or replace function cauta (nume client.nume_clientAt+pe) return boolean
is
v_nume client.nume_clientAt+pe;
begin
1.
select prenume_client into v_nume from client =-ere nume_client>nume;
if v_nume>nume
t-en return true;
else return false;
end if;
eBception
=-en no_data_found t-en return null;
end;
declare
v_nume client.nume_clientAt+pe;
begin
v_nume@>7matei7;
if cauta(v_nume) is null t-en dbms_output.put_line (7nu eBista comenzi pe acest nume7);
elsif cauta(v_nume) t-en dbms_output.put_line (7eBista acest client7);
else dbms_output.put_line (7nu eBista7);
end if;
end;
rezultat@ e/ista acest client
12. Sa se creeze o procedura care pe baza codului de comanda,afiseaza numarul de
bilete si pretul acestora.
create or replace procedure cant ( codc in comenzi.codcomandaAt+pe,v_cantitate out
comenzi.cantitateAt+pe,v_pret out comenzi.pretAt+pe)
is
begin
select cantitate,pret into v_cantitate,v_pret from comenzi =-ere codcomanda>codc;
end ;
declare
nr comenzi.codcomandaAt+pe;
v_cantitate comenzi.%A'T(TAT$At+pe;
v_pret comenzi."$TAt+pe;
begin
nr@>)//;
cant(nr,v_cantitate,v_pret);
dbms_output.put_line (7cantitatea de@ 7?? v_cantitate?? 7 bilete si pretul de @ 7 ?? v_pret ?? 7
lei7);
end;
rezultat@
cantitatea de- 5 bilete si pretul de - 30000 lei
1)
13. Sa se realizeze o procedura care sa afiseze comenzile pentru un an dat.
create or replace procedure com_an (an in number, codc out comenzi.codcomandaAt+pe,
cant out comenzi.cantitateAt+pe,pret out comenzi.pretAt+pe)
as
begin
select codcomanda,cantitate,pret into codc,cant,pret from comenzi =-ere codcomanda in
(select codcomanda from agentie =-ere codconcert in (select codconcert from concert
=-ere eBtract(+ear from data_concert)>an));
end;
declare
an number;
v_codc comenzi.codcomandaAt+pe;
v_cant comenzi.%A'T(TAT$At+pe;
v_pret comenzi."$TAt+pe;
begin
an@>.//9;
com_an(an,v_codc,v_cant,v_pret);
dbms_output.put_line (7%omanda are codul@ 7?? v_codc?? 7 o cantitate de@ 7?? v_cant ?? 7 bilete
si un pret de@ 7?? v_pret ?? 7 lei7);
end;
%omanda are codul@ ))/ o cantitate de@ 1 bilete si un pret de@ 0/// lei
An@>.//0
&unt mai multe comenzi in acel an
14. Sa se creeze un declansator pentru tabela comenzi,atunci cand se adauga o noua
inregistrare.
create or replace trigger com
before insert on comenzi
begin
dbms_output.put_line (7&8a adaugat o comanda7);
end;
insert into comenzi values ()9/,;,//1//0,)0///);
rezultat@
0-a adaugat o comanda
15.Sa se creeze un declansator care sa nu permita comenzi mai mici de 2 bilete.
11
%$AT$ ! $"#A%$ T(33$ cant
B$2!$ ('&$T or E"DAT$ on comenzi
2! $A%F !G
B$3('
(2 @ne=.cantitateH. t-en
A(&$_A""#(%AT(!'_$! (8././., 7"entru o comanda e nevoie de cel putin .
bilete7);
end if;
$'D;
I
update comenzi
set cantitate>1
=-ere codcomanda>)1/;
16. Sa se afiseze detalii despre declansatoul creat anterior.
select trigger_t+pe,table_name,triggering_event from user_triggers
=-ere trigger_name>7cant7;
1#.Sa se creeze un declansator care sa impuna data concertului mai mare de 2! de
minute.
create or replace
T(33$ concert
B$2!$ ('&$T or E"DAT$ on concert
2! $A%F !G
B$3('
(2 @ne=.durataH./ t-en
A(&$_A""#(%AT(!'_$! (8.////, 7En concert dureaza mai mult decat durata
introdusa7);
end if;
$'D;
update concert
set durata>10
=-ere codconcert>1//;
1%. Sa se creeze un declansator care sa actualizeze codul clientului in tabela comenzi
atunci cand el este modificat in tabela clienti.
%$AT$ ! $"#A%$ T(33$ inloc
B$2!$ E"DAT$ !2 id_client !' client
2! $A%F !G
B$3('
update comenzi
set id_client > @id_client
=-ere id_client > @old.id_client;
10
$'D;
update client set id_client>//1/// =-ere id_client>//1//0;
1&.Sa se impuna o restrictie a tarifului,in cazul in care acesta este prea mare.
declare
eBc eBception;
v_tarif formatie.tarifAt+pe;
cursor c1(nume varc-ar.) is select tarif from formatie =-ere numeformatie>nume;
v_nume varc-ar.()/);
begin
v_nume@>7compact7;
open c1(v_nume);
loop
fetc- c1 into v_tarif;
eBit =-en c1Anotfound;
if v_tarif60//// t-en raise eBc;
elsif v_tarif in (.////,0////) t-en dbms_output.put_line(7tariful cerut este acceptabil7);
else dbms_output.put_line (7Tariful cerut este bun7);
end if;
end loop;
eBception =-en eBc t-en dbms_output.put_line(7Tariful cerut este prea mare7);
end;
Tariful cerut este bun
J_nume>KsistemK@
Tariful cerut este prea mare
2!.Sa se creeze un pac'et care sa actualizeze tabela comenzi.

create or replace
T(33$ luna
B$2!$ ('&$T or E"DAT$ on concert
2! $A%F !G
declare
v_dur varc-ar.(0/);
B$3('
select to_c-ar(data_concert, 7++++mm7)into v_dur from concert =-ere codconcert>1//;
if v_dur>7.//1/97 t-en
A(&$_A""#(%AT(!'_$! (8.1/1/, 7'u se pot tine concerte in aceasta luna7);
end if;
$'D;
update concert set data_concert>to_date(7158/98.//07,7DD8::844447) =-ere
codconcert>1/1;
15
... create or replace "A%*A3$ actualizare_comanda (&
procedure adauga_comanda
(p_codc comenzi.codcomandaAt+pe,
p_cant comenzi.cantitateAt+pe,
p_id_client comenzi.id_clientAt+pe,
p_pret comenzi.pretAt+pe);
procedure modifica_comanda
(p_codc comenzi.codcomandaAt+pe,
p_cant comenzi.cantitateAt+pe,
p_d_client comenzi.id_clientAt+pe,
p_pret comenzi.pretAt+pe);
procedure modifica_comanda
(p_codc comenzi.codcomandaAt+pe,
p_cant comenzi.cantitateAt+pe);
procedure sterge_comanda
(p_codc comenzi.%!D%!:A'DAAt+pe);
function eBista_cod
(p_codc comenzi.codcomandaAt+pe)
return boolean;
eBceptie eBception;
$'D;
%$AT$ ! $"#A%$ "A%*A3$ B!D4 actualizare_comanda (&
procedure adauga_comanda
(p_codc comenzi.codcomandaAt+pe,
p_cant comenzi.cantitateAt+pe,
p_id_client comenzi.id_clientAt+pe,
p_pret comenzi.pretAt+pe
)
is
begin
if eBista_cod(p_codc) t-en
raise eBceptie;
else
insert into comenzi values (p_codc, p_cant, p_id_client, p_pret);
end if;
eBception
1;
=-en eBceptie t-en
dbms_output.put_line(7comanda eBistentaL7);
end;
procedure modifica_comanda
(p_codc comenzi.codcomandaAt+pe,
p_cant comenzi.cantitateAt+pe,
p_id_client comenzi.id_clientAt+pe,
p_pret comenzi.pretAt+pe
)
is
begin
if eBista_cod(p_codc) t-en
update comenzi
set cantitate>p_cant,id_client>p_id_client , pret>p_pret
=-ere codcomanda>p_codc;
else
raise eBceptie;
end if;
eBception
=-en eBceptie t-en
dbms_output.put_line(7comanda cu aceast cod nu eBistaL7);
end;
procedure modifica_comanda
(p_codc comenzi.codcomandaAt+pe,
p_cant comenzi.cantitateAt+pe
)
is
begin
if eBista_cod(p_codc) t-en
update comenzi
set cantitate>p_cant
=-ere codcomanda>p_codc;
else
raise eBceptie;
end if;
eBception
=-en eBceptie t-en
dbms_output.put_line(7%omanda cu aceast cod nu eBistaL7);
end;
procedure sterge_comanda
(p_codc comenzi.codcomandaAt+pe)
is
begin
19
if eBista_cod(p_codc) t-en
delete from comenzi
=-ere codcomanda>p_codc;
dbms_output.put_line(7%omanda cu codul 7??p_codc??7 a fost stearsaL7);
else
raise eBceptie;
end if;
eBception
=-en eBceptie t-en
dbms_output.put_line(7comanda cu aceast cod nu eBistaL7);
end;
function eBista_cod
(p_codc comenzi.codcomandaAt+pe)
return boolean
is
v_unu number;
begin
select 1 into v_unu
from comenzi
=-ere codcomanda>p_codc;
return true;
eBception
=-en no_data_found t-en
return false;
end;
$'D;
eBecute actualizare_comanda.adauga_comanda())/,//1/0, 1., .///);
select D from comenzi;
eBecute actualizare_comanda.modifica_comanda()./,//1/1/, 9, .////);
select D from comenzi;
eBecute actualizare_comanda.modifica_comanda()./, 0);
select D from comenzi;
eBecute actualizare_comanda.sterge_comanda()/1);
select D from produse;
1<