Proiect Sgbd Luca Stefania
April 13, 2019 | Author: Alin Latu | Category: N/A
Short Description
CSIE, proiect SGBD...
Description
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 codco ncert,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
durata
pret
CONCERT
codconcert
locatie
data_concert
nr_bilete
AGENTIE
codagentie
nr_bilete
codconcert
codcomand a
cant cantit itat ate e
id_client
pret
COMENZI
codc codcom oman anda da 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() 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(), nrcom number(5)); %reate table client (id_client number(5) not null, nume_client varc-ar(/), prenume_client varc-ar(/), nrcom number() 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); nu mber(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//7,7DD8::8 44447),///,7-7,0///); insert into concert values (1/1,7parcul izvor7,to_date(718/58//07,7DD8::8 44447),0//,7-7,/); insert into concert values (11/,7sala parlamentului7,to_date(7/0818//7,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(718/98//7,7DD8::8 44447),0//,7/min7,1////); insert into concert values (1/,7sala palatului7,to_date(718/08//97,7DD8::8 44447),///,7-7,0//); insert into concert values (10/,7palatul copiilor7,to_date(70818//57,7DD8::8 44447),1//,71-7,/); insert into concert values (15/,7sala parlamentului7,to_date(7/8/58//07,7DD8::8 44447),19//,7-7,10////); insert into concert values (//,7parcul izvor7,to_date(7118118//7,7DD8::8 44447),1///,7/min7,1///); insert into concert values (1/,7sala palatului7,to_date(7/8/8//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-/7,0///); insert into concert values (//,7parcul izvor7,to_date(7158/8//7,7DD8::8 44447),1//,7-7,/);
insert into formatie values (/1,7compact7,0,1////,1//,7roc7); insert into formatie values (/,7andreea balan7,1,////,1/1,7pop7); insert into formatie values (/,7pin7,1,1/////,11/,77); insert into formatie values (/,7blond+7,,//// ,1/,7pop7); insert into formatie values (/0,7vita de vie7,,0///,1/,7roc7); 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//,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//,nr_bilete1.1/ =-ere locatie>loc; end nr_bilete; declare v_loc varc-ar(/); begin v_loc@>7parc7; 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 ec eception; v_nume client.nume_clientt+pe; v_pren client.prenume_clientt+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>//); dbms_output.put_line (v_nume ?? 7 7 ?? v_pren); eception =-en no_data_found t-en dbms_output.put_line (7'u eista 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 locatie,nr_bilete,durata from concert =-ere etract (+ear (+ear from data_concert) >an; rec_an c1ro=t+pe; v_an number; begin v_an@>//; open c1(v_an); loop fetc- c1 into rec_an; eit =-en c1notfound; dbms_output.put_line(7n 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.tarift+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 /// 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.codcomandat+pe) return number is v_cant comenzi.cantitatet+pe; begin select cantitate into v_cant from comenzi =-ere codcomanda>id; return v_cant; eception =-en no_data_found t-en return null; end; declare v_id comenzi.codcomandat+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_clientt+pe) return boolean is v_nume client.nume_clientt+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; eception =-en no_data_found t-en return null; end; declare v_nume client.nume_clientt+pe; begin v_nume@>7matei7; if cauta(v_nume) is null t-en dbms_output.put_line (7nu eista comenzi pe acest nume7); elsif cauta(v_nume) t-en dbms_output.put_line (7eista acest client7); else dbms_output.put_line (7nu eista7); 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.codcomandat+pe,v_cantitate out comenzi.cantitatet+pe,v_pret out comenzi.prett+pe) is begin select cantitate,pret into v_cantitate,v_pret from comenzi =-ere codcomanda>codc; end ; declare nr comenzi.codcomandat+pe; v_cantitate comenzi.%A'TTAT$t+pe; v_pret comenzi."$Tt+pe; begin nr@>//; cant(nr,v_cantitate,v_pret); dbms_output.put_line (7cantitatea de@ 7?? v_cantitate?? 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.codcomandat+pe, cant out comenzi.cantitatet+pe,pret out comenzi.prett+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 etract(+ear from data_concert)>an)); end; declare an number; v_codc comenzi.codcomandat+pe; v_cant comenzi.%A'TTAT$t+pe; v_pret comenzi."$Tt+pe; begin an@>//9; com_an(an,v_codc,v_cant,v_pret); dbms_output.put_line (7%omanda are codul@ 7?? v_co dc?? 7 o cantitate de@ 7?? v_cant v_can t ?? 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@ -a adaugat o comanda
15.Sa se creeze un declansator care sa nu permita comenzi mai mici de 2 bilete.
1
%$AT$ ! $"#A%$ T33$ cant B$2!$ '&$T or E"DAT$ on comenzi 2! $A%F !G B$3' 2 @ne=.cantitateH t-en A&$_A""#%AT!'_$! (8//, (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 T33$ concert B$2!$ '&$T or E"DAT$ on concert 2! $A%F !G B$3' 2 @ne=.durataH/ t-en A&$_A""#%AT!'_$! (8////, (8////, 7En concert dureaza mai mai mult decat durata 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%$ T33$ 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 ec eception; v_tarif formatie.tarift+pe; cursor c1(nume varc-ar) is select 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; eit =-en c1notfound; if v_tarif60//// t-en raise ec; 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; eception =-en ec 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 T33$ 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 7++++mm7)into v_dur from concert =-ere codconcert>1//; if v_dur>7///97 t-en A&$_A""#%AT!'_$! (81/1/, (81/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.codcomandat+pe, p_cant comenzi.cantitatet+pe, p_id_client comenzi.id_clientt+pe, p_pret comenzi.prett+pe); procedure modifica_comanda (p_codc comenzi.codcomandat+pe, p_cant comenzi.cantitatet+pe, p_d_client comenzi.id_clientt+pe, p_pret comenzi.prett+pe); procedure modifica_comanda (p_codc comenzi.codcomandat+pe, p_cant comenzi.cantitatet+pe); procedure sterge_comanda (p_codc comenzi.%!D%!:A'DAt+pe); function eista_cod (p_codc comenzi.codcomandat+pe) return boolean; eceptie eception; $'D;
%$AT$ ! $"#A%$ "A%*A3$ B!D4 actualizare_comanda & procedure adauga_comanda (p_codc comenzi.codcomandat+pe, p_cant comenzi.cantitatet+pe, p_id_client comenzi.id_clientt+pe, p_pret comenzi.prett+pe ) is begin if eista_cod(p_codc) t-en raise eceptie; else insert into comenzi values (p_codc, p_cant, p_id_client, p_pret); end if; eception
1
=-en eceptie t-en dbms_output.put_line(7comanda eistentaL7); end; procedure modifica_comanda (p_codc comenzi.codcomandat+pe, p_cant comenzi.cantitatet+pe, p_id_client comenzi.id_clientt+pe, p_pret comenzi.prett+pe ) is begin if eista_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 eceptie; end if; eception =-en eceptie t-en dbms_output.put_line(7comanda cu aceast cod nu eistaL7); end; procedure modifica_comanda (p_codc comenzi.codcomandat+pe, p_cant comenzi.cantitatet+pe ) is begin if eista_cod(p_codc) t-en update comenzi set cantitate>p_cant =-ere codcomanda>p_codc; else raise eceptie; end if; eception =-en eceptie t-en dbms_output.put_line(7%omanda cu aceast cod nu eistaL7); end; procedure sterge_comanda (p_codc comenzi.codcomandat+pe) is begin
19
if eista_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 eceptie; end if; eception =-en eceptie t-en dbms_output.put_line(7comanda cu aceast cod nu eistaL7); end; function eista_cod (p_codc comenzi.codcomandat+pe) return boolean is v_unu number; begin select 1 into v_unu from comenzi =-ere codcomanda>p_codc; return true; eception =-en no_data_found t-en return false; end; $'D;
eecute actualizare_comanda.adauga_comanda(/,//1/0, 1, ///); select from comenzi; eecute actualizare_comanda.modifica_comanda(/,//1/1/, 9, ////); select from comenzi; eecute actualizare_comanda.modifica_comanda(/, 0); select from comenzi; eecute actualizare_comanda.sterge_comanda(/1); select from produse;
1<
View more...
Comments