Sunteți pe pagina 1din 16

Academia de Studii Economice Facultatea de Cibernetic, Statistic i Informatic Economic

PROIECT BAZE DE DATE

Mr Sabina Grupa 1019 Seria A

Tema proiectului Se realizeaz o baz de date pentru a ine evidena activitii unui magazin online care vinde produse personalizate pentru membrii unei organizaii de tineret. Baza de date cuprinde 4 tabele: una n care sunt salvate date despre produsele disponibile, o tabel care cuprinde datele despre clienti, in cazul nostru centrele locale, o tabel cu evidena comenzilor i una cu rndul comenzilor. Schema conceptual a bazei de date:

Scriptul: drop table produse_scout cascade constraint;


drop table cl cascade constraint; drop table comenzi_scout cascade constraint; drop table rand_comenzi_scout cascade constraint; Creare tabele create table produse_scout (id_produs number (3), denumire varchar2(60) not null, ramura varchar2 (15), pret number (4,2), stoc number (4), constraint pk_prod primary key (id_produs), constraint ck_ramura check (ramura in ('lupisori', 'temerari', 'exploratori', 'seniori', 'lideri', 'general')), constraint ck_stoc check (stoc>0) );

create table cl (id_cl number (3), denumire varchar2(40) not null, telefon number (10), adresa_cl varchar2 (40) not null, email varchar2 (20), constraint pk_cl primary key (id_cl), constraint uq_tel unique (telefon) );

create table comenzi (nr_comanda number (6), data_com date, id_cl number (3), term_liv date, constraint pk_com primary key (nr_comanda), constraint fk_com foreign key (id_cl) references cl (id_cl) );

create table rand_comenzi_scout (nr_comanda number (6), id_produs number (3), cantitate number (4), pret number (4,2), constraint pk_rdcom primary key (nr_comanda, id_produs), constraint fk_comscout foreign key (nr_comanda) references comenzi (nr_comanda), constraint fk_prodscout foreign key (id_produs) references produse_scout (id_produs) );

*S se modifice tipul cmpului telefon din tabela cl n tipul ir de caractere alter table cl modify telefon varchar2 (15);

*S se redenumeasc tabela comenzi n comenzi_scout alter table comenzi rename to comenzi_scout;

* S se adauge restricia cantitatea>0 n tabela rand_comenzi_scout alter table rand_comenzi_scout add constraint ck_cant check (cantitate>0);

*S se redenumeasc coloana term_liv n data_livr alter table comenzi_scout rename column term_liv to data_livr;

*S se dezactiveze restricia ca adresa s nu fie nul. alter table cl disable constraint SYS_C00283447;

Inserare valori insert into produse_scout values (100, 'esarfa lupisori', 'lupisori', 9, 100); insert into produse_scout values (101, 'esarfa temerari', 'temerari', 9, 100); insert into produse_scout values (102, 'esarfa exploratori', 'exploratori', 9, 80); insert into produse_scout values (103, 'esarfa seniori', 'seniori', 9, 50); insert into produse_scout values (104, 'esarfa lideri', 'lideri', 9, 100); insert into produse_scout values (105, 'tricou polo dama', 'general', 33, 200); insert into produse_scout values (106, , 'insemn national (tricolor)', 'general', 2.8, 300);

insert into cl values (001, 'Suceava', '0767511060', 'suceava, Eroilor, 60', 'suceava@scout.ro'); insert into cl values (002, 'AMD', '0745837920', 'pildesti, neamt, V. Alecsandri, 1', 'pildesti@scout.ro'); insert into cl values (003, 'AMD', '0745897478', 'Bucuresti', 'buc.amd@scout.ro'); insert into cl values (004, 'Mircea cel Batran', '0787675643', 'Ramnicu Valcea, CP50, OP 20', 'rmvalcea@scout.ro'); insert into cl values (005, 'Cluj Napoca', '0767897634', 'Cluj Napoca', 'cluj@scout.ro');

insert into comenzi_scout values (100, to_date ('12-07-2010', 'DD-MM-YYYY'), 2, to_date ('20-12-2010', 'DD-MM-YYYY')); insert into comenzi_scout values (101, to_date ('22-10-2010', 'DD-MM-YYYY'), 4, to_date ('12-12-2010', 'DD-MM-YYYY')); insert into comenzi_scout values (102, to_date ('29-11-2009', 'DD-MM-YYYY'), 5, to_date ('15-11-2010', 'DD-MM-YYYY')); insert into comenzi_scout values (103, to_date ('15-08-2010', 'DD-MM-YYYY'), 2, to_date ('20-12-2010', 'DD-MM-YYYY')); insert into comenzi_scout values (104, to_date ('02-05-2010', 'DD-MM-YYYY'), 1, to_date ('20-11-2010', 'DD-MM-YYYY')); insert into comenzi_scout values (105, to_date ('09-08-2010', 'DD-MM-YYYY'), 3, to_date ('15-02-2011', 'DD-MM-YYYY'));

insert into rand_comenzi_scout values (100, 100, 30, 9); insert into rand_comenzi_scout values (100, 105, 5, 30); insert into rand_comenzi_scout values (100, 101, 50, 8); insert into rand_comenzi_scout values (102, 103, 15, 9); insert into rand_comenzi_scout values (102, 106, 20, 2.8); insert into rand_comenzi_scout values (101, 104, 20, 9); insert into rand_comenzi_scout values (103, 106, 40, 2.8); insert into rand_comenzi_scout values (104, 102, 10, 9); insert into rand_comenzi_scout values (104, 103, 10, 9); insert into rand_comenzi_scout values (105, 105, 20, 28);

*S se micoreze cu 10% preul produselor comandate de CL care au comandat mai mult de 40 de produse de acelai fel. update rand_comenzi_scout set pret=0.9*pret where cantitate>=40;

*S se modifice stocul pentru produsul cu id_produs 106, presupunnd c au fost livrate deja produsele centrelor locale care au cerut acest produs. update produse_scout set stoc=stoc- (select sum (cantitate) from rand_comenzi_scout where id_produs=106) where id_produs=106;

*S se modifice data livrrii pentru produsele comandate de centrele locale din Bucuresti n data sistemului. update comenzi_scout set data_livr=sysdate where id_cl in (select id_cl from cl where lower (substr(adresa_cl, 1, 9))='bucuresti');

*S se dezactiveze restricia prin care ramura trebuie sa ia doar valori dintr-o list prestabilit. alter table produse_scout disable constraint ck_ramura;

*s se modifice valoare cmpului ramur din general n toate. update produse_scout set ramura='toate' where ramura='general';

*S se nlocuiasc numrul de telefon al centrului local Cluj Napoca cu numarul oficial de telefon al Organizatiei Nationale (07cercetasi) update cl set telefon='07cercetasi' where lower(denumire)='cluj napoca';

*S se tearg comenzile care constau in mai putin de 10 produse. delete from rand_comenzi_scout where cantitate<10;

*S se afieze denumirea centrelor locale i informaii despre produsele comandate (denumire, cantitatea comandat i preul acestora) pentru Centrele Locale care au fcut comanda pn la 01.06.2010. select cl.denumire, cs.nr_comanda, p.denumire, r.cantitate, r.pret from produse_scout p, rand_comenzi_scout r, comenzi_scout cs, cl where p.id_produs=r.id_produs and r.nr_comanda=cs.nr_comanda and cs.id_cl=cl.id_cl and cs.data_com<to_date('01-06-2010','DD-MM-YYYY');

*S se afieze denumirea centrelor locale si valoarea comenzilor efectuate, n ordinea cresctoare a valorii comenzii. select cl.denumire, sum(r.cantitate*r.pret) valoare from cl, comenzi_scout cs, rand_comenzi_scout r where cl.id_cl=cs.id_cl and cs.nr_comanda=r.nr_comanda GROUP BY cl.denumire order by valoare;

*Introducei nc o nregistrare n tabela CL insert into cl values (6, 'Alb Bucuresti', '0746768765', 'Bucuresti, sector 2', 'alb.buc@scout.ro');

*Afiati Centrele locale din Bucureti select * from cl where lower (substr(adresa_cl, 1, 9))='bucuresti';

*S se afieze centrele locale care nu au efectuat nici o comand. select cl.denumire, cl.adresa_cl from cl, comenzi_scout cs where cl.id_cl=cs.id_cl(+) MINUS select cl.denumire, cl.adresa_cl from cl, comenzi_scout cs where cl.id_cl(+)=cs.id_cl;

*S se informaii despre comenzile efectuate de centrele locale care au telefoanele in reeaua Orange (074...). select cl.denumire, c.data_com, c.data_livr from cl, comenzi_scout c where cl.id_cl=c.id_cl and substr(cl.telefon, 1, 3)='074';

*S se listeze numele centrelor locale care au dat mai mult de o comand. select cl.denumire, count(c.id_cl) com_efectuate from cl, comenzi_scout c where cl.id_cl=c.id_cl group by cl.denumire having count(c.id_cl)>1;

*S se afieze valoarea totala a produselor comandate de centrele locale. select 'valoarea totala='|| sum (pret*cantitate)||' lei' valoare from rand_comenzi_scout;

*S se afieze date despre centrele locale care au comandat aceleai produse ca i centrul local cu id-ul 2. select * from cl where id_cl in (select id_cl from comenzi_scout where nr_comanda in (select nr_comanda from rand_comenzi_scout where id_produs in (select id_produs from rand_comenzi_scout where nr_comanda in (select nr_comanda from comenzi_scout where id_cl=2))));

*S se afieze informaii despre toate produsele care au n stoc mai mult de 50 de buc. select * from produse_produse where stoc>50;

*S se listeze comenzile ncheiate pn la data de 6 dec 2010. select nr_comanda from comenzi_scout where to_date (data_com, 'dd-mm-yyyy')<to_date('6-12-2010', 'dd-mm-yyyy');

*s se afieze din ce parte a rii face parte fiecare centru local select denumire, case when lower(substr(adresa_cl , 1, 7))='suceava' or lower(substr(adresa_cl, 1, 8))='pildesti' then 'est' when lower(substr(adresa_cl, 1, 9))='bucuresti' or lower(substr(adresa_cl, 1, 3))='ram' then 'sud' else 'vest' end regiune, adresa_cl from cl;

*S se creeze o tabel virtual cu toate informaiile centrelor locale care nu sunt din Bucureti. Create or replace view cl_nubuc As select * from cl where lower(substr(adresa_cl, 1, 9))<>'bucuresti'; select * from cl_nubuc;

*S se creeze o tabel virtual cu valoarea totala a fiecarei comenzi, fr a putea fi actualizat mai trziu. create or replace view val_com as select cl.denumire, cl.adresa_cl, sum(r.cantitate*r.pret) valoare_totala from cl, comenzi_scout c, rand_comenzi_scout r where cl.id_cl=c.id_cl and c.nr_comanda=r.nr_comanda GROUP BY cl.denumire, cl.adresa_cl with read only; select * from val_com;

*S se creeze o tabel virtual care s conin doar informaii despre produsele care au mai putin de 100 unitati in stoc. create or replace view aprovizionare as select denumire, stoc from produse_scout where stoc<100; select * from aprovizionare;

*S se tearg tabela virtual aprovizionare. Drop view aprovizionare; *S se creeze un index pe tabela produse pe coloana denumire. create index produse_denumire_idx on produse_scout (denumire); *S se creeze un index pe tabela cl pe coloana email. create index cl_email_idx on cl (email); *S se tearg indecii creai anterior.

drop index produse_denumire_idx; drop index cl_email_idx;

*S se creeze o secven pentru asigurarea unicitii cheii primare din tabela comenzi_scout. Create sequence seq_nrcomanda start with 106 Increment by 1 Maxvalue 150 nocycle; insert into comenzi_scout values (seq_nrcomanda.nextval, to_date('25-12-2010', 'ddmm-yyyy'), '3', to_date('20-02-2011', 'dd-mm-yyyy'));

*s se afieze valoarea curent a secvenei. Select seq_nrcomanda.currval val_curenta from dual;

*S se creeze un sinomin pentru tabela rand_comenzi_scout. create or replace synonym detalii_comenzi for rand_comenzi_scout;

S-ar putea să vă placă și