Documente Academic
Documente Profesional
Documente Cultură
Proiect DD
Proiect DD
1
Cuprins
8. Functii .................................................................................................... 33
9. Proceduri ............................................................................................... 35
2
1. Enunt
Să se creeze o bază de date care să ţină evidenţa clienţilor unui magazin. Fiecare client are un nume, o
dată de înregistrare, o adresă şi alte detalii. Fiecare adresă se va reprezenta prin oraş, stradă, număr,
bloc, etaj, apartament, cod poştal, judeţ, ţară şi tip de client. Mai multi clienţi pot avea aceeaşi adresă şi
un client poate să aibă mai multe adrese. Fiecare client are o listă de contacte (persoane din cadrul
magazinului). Fiecare persoană de contact poate lucra cu unul sau mai mulţi clienţi, se identifică prin
nume, statut în cadrul firmei, departament, telefon. Fiecare persoană de contact ţine o listă cu
comenzile pe care le-a primit. Fiecare comandă are o dată, un număr de ordine şi o sumă totală.
Cerinte
Să se realizeze modelul entitate-legătură.
Să se facă trecerea la modelul relaţional (să se detalieze operaţiile efectuate pentru fiecare entitate
în parte) .
Să se creeze o bază de date care să conţină:
1. Legături între tabele;
2. Integritatea referenţială pentru a efectua corect operaţiile de actualizare (adăugare, ştergere,
modificare);
3. Chei primare şi chei externe;
4. Reguli de ştergere şi modificare în cascadă pentru entităţile cu chei externe.
1) Să se facă testarea bazei de date prin efectuarea de diferite operaţii asupra ei. Trebuie să existe
cel puţin o interogare din fiecare tip (în total minim 15 interogări), 2 funcţii diferite (care să nu
facă un simplu select), 2 proceduri stocate şi 1 trigger.
3
2. Modelul Entitate-Legatura
Detalierea operatiilor: Fiecare entitate este transformata in cate o tabela separata cu campurile
echivalente atributelor. Fiecare atribut identificator devine cheia primara a acelei tabele.
Pentru legaturile tip 1-M, se considera cheie externa in tabela din partea M, facand legatura cu
cealalta tabela, iar pentru legaturile tip M-M se construieste cate o tabela separata care contine
cheile externe catre cele doua tabele intre care se face legatura. In modelul entitate-legatura
exista un supertip „Persoana” si doua subtipuri „Angajat”, care la randul lui contine un subtip
„Manager Magazin”, si „Client”. O persoana poate fi atat Angajat, cat si Client. Valorile pentru
pret din tabelele Produs si ProdCump sunt valori calculate. In tabela Produs, valoarea pretului
4
este valoarea minima dintre preturile de la furnizori, iar in tabela ProdCump se calculeaza ca
fiind Cantitate*Produs.Pret.
5
create table Manager_Magazin
(
idAngajat int not null,
Bonus float not null
);
alter table Client add constraint clientp_fk foreign key (CNP) references Persoana(CNP) on
delete cascade;
alter table Produs add constraint produsr_fk foreign key (codMagazin) references
Magazin(CodMagazin) on delete cascade;
6
create table ProdusFurnizor
(
CodProdus int not null,
CodFurnizor int not null,
PretInt float not null
);
);
7
alter table ProdCump add (
constraint prodc_pk primary key (Serie,CodProdus),
constraint prodcp_fk foreign key (CodProdus) references Produs(CodProdus) on delete
cascade,
constraint prods_fk foreign key (Serie) references Factura(Serie) on delete cascade,
constraint proda_fk foreign key (ANgajat) references Angajat(idAngajat) on delete
cascade
);
8
5. Indexarea unei tabele
9
insert into Magazin (CodMagazin,Denumire)
values ('AUTO','Piese auto');
insert into Magazin (CodMagazin,Denumire)
values ('ANIM','Animale');
insert into Magazin (CodMagazin,Denumire)
values ('SNACK','Snacks-uri si Chips-uri');
insert into Magazin (CodMagazin,Denumire)
values ('COPII','Jucarii');
insert into Magazin (CodMagazin,Denumire)
values ('HAINE','Imbracaminte si incaltaminte');
insert into Magazin (CodMagazin,Denumire)
values ('DETER','Produse de curatenie');
insert into Magazin (CodMagazin,Denumire)
values ('ELCTR','Electronice si electrocasnice');
10
insert into Persoana (CNP,Nume,Adresa,DataNasterii)
values ('1900212172311','Caldare Cristian','Craiova, str.Dacia', to_date('12061990','DDMMYYYY'));
insert into Persoana (CNP,Nume,Adresa,DataNasterii)
values ('1900218372921','Gadoiu Andreea','Pitesti, str.Craiovei', to_date('15021973','DDMMYYYY'));
insert into Persoana (CNP,Nume,Adresa,DataNasterii)
values ('1933212162221','Popescu Alin','Craiova, str.Doljului', to_date('12091980','DDMMYYYY'));
insert into Persoana (CNP,Nume,Adresa,DataNasterii)
values ('1900212111021','Davidescu Ion','Bucuresti, str.Luncii', to_date('17041960','DDMMYYYY'));
insert into Persoana (CNP,Nume,Adresa,DataNasterii)
values ('1901111111021','Iordache Mirela','Craiova, str.Opanez', to_date('19081959','DDMMYYYY'));
insert into Persoana (CNP,Nume,Adresa,DataNasterii)
values ('1900212120021','Radu Cristiana','Craiova, str.Decebal', to_date('19021973','DDMMYYYY'));
insert into Persoana (CNP,Nume,Adresa,DataNasterii)
values ('1900212162222','Predescu Ionela','Craiova, str.Teilor', to_date('22051949','DDMMYYYY'));
insert into Persoana (CNP,Nume,Adresa,DataNasterii)
values ('2880616131564','Goanta Miruna','Iasi, str.Voievozilor', to_date('16061988','DDMMYYYY'));
insert into Persoana (CNP,Nume,Adresa,DataNasterii)
values ('1860601167951','Popovici Claudiu','Targoviste, str.Lalelelor',
to_date('01061986','DDMMYYYY'));
insert into Persoana (CNP,Nume,Adresa,DataNasterii)
values ('1801212236578','Mihai Petre','Craiova, str.Dacia', to_date('12121980','DDMMYYYY'));
insert into Persoana (CNP,Nume,Adresa,DataNasterii)
values ('1910512168749','Buricea Ionel','Craiova, str.Decebal', to_date('12051991','DDMMYYYY'));
insert into Persoana (CNP,Nume,Adresa,DataNasterii)
values ('2880803123654','Ionescu Ionelia','Craiova, str.N.Titulescu', to_date('03081988','DDMMYYYY'));
insert into Persoana (CNP,Nume,Adresa,DataNasterii)
values ('2691110155479','Preda Ioana','Timisoara, str.Calea Bucuresti',
to_date('10111969','DDMMYYYY'));
insert into Persoana (CNP,Nume,Adresa,DataNasterii)
values ('2830504698742','Mardale Oana','Arad, str.Calea Timisoarei',
to_date('04051983','DDMMYYYY'));
insert into Persoana (CNP,Nume,Adresa,DataNasterii)
values ('1961212264789','Mihai Mihaita','Craiova, str.Lamaitei', to_date('12121996','DDMMYYYY'));
insert into Persoana (CNP,Nume,Adresa,DataNasterii)
values ('1901221544895','Argus Lucian','Titu, str.Bancuta', to_date('22011990','DDMMYYYY'));
insert into Persoana (CNP,Nume,Adresa,DataNasterii)
values ('1870307336896','Mirescu Alexandru','Bucuresti, str.Bradului',
to_date('07031987','DDMMYYYY'));
insert into Persoana (CNP,Nume,Adresa,DataNasterii)
values ('1891115656899','Popa Sorin','Craiova, str.Teilor', to_date('15111989','DDMMYYYY'));
insert into Persoana (CNP,Nume,Adresa,DataNasterii)
values ('1881211644899','Prescu Cristinel','Craiova, str.Brandusa', to_date('11121988','DDMMYYYY'));
11
--insert into Client
insert into Client (CNP,NrLeg)
values ('1900212160021','10001');
insert into Client (CNP,NrLeg)
values ('1934435160021','10002');
insert into Client (CNP,NrLeg)
values ('1900213424021','10003');
insert into Client (CNP,NrLeg)
values ('2851112160021','10004');
12
insert into Client (CNP,NrLeg)
values ('2991112160021','10005');
insert into Client (CNP,NrLeg)
values ('1876543230021','10006');
insert into Client (CNP,NrLeg)
values ('2345662160021','10007');
insert into Client (CNP,NrLeg)
values ('1900234560021','10008');
insert into Client (CNP,NrLeg)
values ('1900963072321','10009');
insert into Client (CNP,NrLeg)
values ('2039731216021','10010');
insert into Client (CNP,NrLeg)
values ('1900333160021','10011');
insert into Client (CNP,NrLeg)
values ('2222212160931','10012');
insert into Client (CNP,NrLeg)
values ('1900212161234','10013');
insert into Client (CNP,NrLeg)
values ('1900212175832','10014');
insert into Client (CNP,NrLeg)
values ('1900212172311','10015');
insert into Client (CNP,NrLeg)
values ('1900218372921','10016');
insert into Client (CNP,NrLeg)
values ('1933212162221','10017');
insert into Client (CNP,NrLeg)
values ('1900212111021','10018');
insert into Client (CNP,NrLeg)
values ('1901111111021','10019');
insert into Client (CNP,NrLeg)
values ('1900212120021','10020');
13
--insert into Furnizor
insert into Furnizor (CodFurnizor,Nume,Adresa)
values (100,'Danone','Bucuresti');
insert into Furnizor (CodFurnizor,Nume,Adresa)
values (101,'CocaCola','Bucuresti');
insert into Furnizor (CodFurnizor,Nume,Adresa)
values (102,'Poiana','Brasov');
insert into Furnizor (CodFurnizor,Nume,Adresa)
values (103,'Vinuri Vrancea','Focsani');
insert into Furnizor (CodFurnizor,Nume,Adresa)
values (104,'Abatorul Diana',NULL);
insert into Furnizor (CodFurnizor,Nume,Adresa)
values (105,'Castro','Bucuresti');
insert into Furnizor (CodFurnizor,Nume,Adresa)
values (106,'Floriol','Iasi');
insert into Furnizor (CodFurnizor,Nume,Adresa)
values (107,'Spar','Bucuresti');
insert into Furnizor (CodFurnizor,Nume,Adresa)
values (108,'Bergenbier',NULL);
insert into Furnizor (CodFurnizor,Nume,Adresa)
values (109,'Ulker','Bucuresti');
insert into Furnizor (CodFurnizor,Nume,Adresa)
values (110,'D-Toys','Bucuresti');
insert into Furnizor (CodFurnizor,Nume,Adresa)
values (111,'Laura','Cluj-Napoca');
14
insert into Furnizor (CodFurnizor,Nume,Adresa)
values (112,'PanGroup','Craiova');
insert into Furnizor (CodFurnizor,Nume,Adresa)
values (113,'VelPitar',NULL);
insert into Furnizor (CodFurnizor,Nume,Adresa)
values (114,'Albalact','Cluj-Napoca');
insert into Furnizor (CodFurnizor,Nume,Adresa)
values (115,'Unisol',NULL);
insert into Furnizor (CodFurnizor,Nume,Adresa)
values (116,'Danone','Bucuresti');
insert into Furnizor (CodFurnizor,Nume,Adresa)
values (117,'Murfatlar','Constanta');
insert into Furnizor (CodFurnizor,Nume,Adresa)
values (118,'Jolidon',NULL);
insert into Furnizor (CodFurnizor,Nume,Adresa)
values (119,'Pepsi','Bucuresti');
15
insert into Produs (CodProdus,Denumire,Pret,Cantitate,CodMagazin)
values (204,'Biscuiti cu ciocolata',NULL,50,'DULCE');
insert into Produs (CodProdus,Denumire,Pret,Cantitate,CodMagazin)
values (205,'Iaurt Danone cu fructe',NULL,50,'LACTA');
insert into Produs (CodProdus,Denumire,Pret,Cantitate,CodMagazin)
values (206,'Lichid de parbriz',NULL,20,'AUTO');
insert into Produs (CodProdus,Denumire,Pret,Cantitate,CodMagazin)
values (207,'Pepene verde',NULL,20,'LEGFR');
insert into Produs (CodProdus,Denumire,Pret,Cantitate,CodMagazin)
values (208,'Morcovi',NULL,10,'LEGFR');
insert into Produs (CodProdus,Denumire,Pret,Cantitate,CodMagazin)
values (209,'Bluza cu maneca scurta',NULL,10,'HAINE');
insert into Produs (CodProdus,Denumire,Pret,Cantitate,CodMagazin)
values (210,'Masina cu telecomanda',NULL,5,'COPII');
insert into Produs (CodProdus,Denumire,Pret,Cantitate,CodMagazin)
values (211,'Chio chips',NULL,20,'SNACK');
insert into Produs (CodProdus,Denumire,Pret,Cantitate,CodMagazin)
values (212,'Paine de secara VelPitar',NULL,10,'PANIF');
insert into Produs (CodProdus,Denumire,Pret,Cantitate,CodMagazin)
values (213,'Paine de secara PanGroup',NULL,10,'PANIF');
insert into Produs (CodProdus,Denumire,Pret,Cantitate,CodMagazin)
values (214,'Whiskas junior',NULL,20,'ANIM');
insert into Produs (CodProdus,Denumire,Pret,Cantitate,CodMagazin)
values (215,'Cuptor cu microunde',NULL,10,'ELCTR');
insert into Produs (CodProdus,Denumire,Pret,Cantitate,CodMagazin)
values (216,'Frigider',NULL,6,'ELCTR');
insert into Produs (CodProdus,Denumire,Pret,Cantitate,CodMagazin)
values (217,'Vin de masa dulce Murfatlar',NULL,10,'BAUTA');
insert into Produs (CodProdus,Denumire,Pret,Cantitate,CodMagazin)
values (218,'Parizer de pui',NULL,20,'MEZEL');
insert into Produs (CodProdus,Denumire,Pret,Cantitate,CodMagazin)
values (219,'Muschi de vita',NULL,10,'CARNC');
insert into Produs (CodProdus,Denumire,Pret,Cantitate,CodMagazin)
values (220,'Ciocolata Rom',NULL,100,'DULCE');
insert into Produs (CodProdus,Denumire,Pret,Cantitate,CodMagazin)
values (221,'Laptop HP',NULL,15,'ELCTR');
insert into Produs (CodProdus,Denumire,Pret,Cantitate,CodMagazin)
values (222,'Pufuleti Duck',NULL,350,'SNACK');
insert into Produs (CodProdus,Denumire,Pret,Cantitate,CodMagazin)
values (223,'Pantaloni 3/4',NULL,17,'HAINE');
insert into Produs (CodProdus,Denumire,Pret,Cantitate,CodMagazin)
values (224,'Cauciuc iarna',NULL,124,'AUTO');
insert into Produs (CodProdus,Denumire,Pret,Cantitate,CodMagazin)
values (225,'Coca Cola',NULL,1001,'BAUTR');
insert into Produs (CodProdus,Denumire,Pret,Cantitate,CodMagazin)
values (226,'Picioare de porc',NULL,23,'MEZEL');
insert into Produs (CodProdus,Denumire,Pret,Cantitate,CodMagazin)
values (227,'Parizer taranesc',NULL,64,'MEZEL');
16
insert into Produs (CodProdus,Denumire,Pret,Cantitate,CodMagazin)
values (228,'Bere Timisoreana',NULL,10,'BAUTA');
insert into Produs (CodProdus,Denumire,Pret,Cantitate,CodMagazin)
values (229,'Vin de masa',NULL,10,'BAUTA');
insert into Produs (CodProdus,Denumire,Pret,Cantitate,CodMagazin)
values (230,'Tacamuri de pui',NULL,100,'CARNC');
insert into Produs (CodProdus,Denumire,Pret,Cantitate,CodMagazin)
values (231,'Lapte batut LaDorna',NULL,10,'LACTA');
insert into Produs (CodProdus,Denumire,Pret,Cantitate,CodMagazin)
values (232,'Cascaval Rustic',NULL,14,'LACTA');
insert into Produs (CodProdus,Denumire,Pret,Cantitate,CodMagazin)
values (233,'Iaurt Danone',NULL,113,'LACTA');
insert into Produs (CodProdus,Denumire,Pret,Cantitate,CodMagazin)
values (234,'Ariel',NULL,90,'DETER');
insert into Produs (CodProdus,Denumire,Pret,Cantitate,CodMagazin)
values (235,'Bonux',NULL,44,'DETER');
insert into Produs (CodProdus,Denumire,Pret,Cantitate,CodMagazin)
values (236,'Figurina de actiune',NULL,61,'COPII');
insert into Produs (CodProdus,Denumire,Pret,Cantitate,CodMagazin)
values (237,'Masinuta teleghidata',NULL,17,'COPII');
insert into Produs (CodProdus,Denumire,Pret,Cantitate,CodMagazin)
values (238,'Macrou',NULL,101,'PESTE');
insert into Produs (CodProdus,Denumire,Pret,Cantitate,CodMagazin)
values (239,'Hering',NULL,10,'PESTE');
insert into Produs (CodProdus,Denumire,Pret,Cantitate,CodMagazin)
values (240,'Gem de piersici',NULL,10,'CONS');
insert into Produs (CodProdus,Denumire,Pret,Cantitate,CodMagazin)
values (241,'Gem de gutui',NULL,10,'CONS');
17
--insert into ProdusFurnizor
insert into ProdusFurnizor (CodProdus,CodFurnizor,PretInt)
values (209,118,25.4);
insert into ProdusFurnizor (CodProdus,CodFurnizor,PretInt)
values (212,112,2.8);
insert into ProdusFurnizor (CodProdus,CodFurnizor,PretInt)
values (212,113,2.2);
insert into ProdusFurnizor (CodProdus,CodFurnizor,PretInt)
values (213,112,2);
insert into ProdusFurnizor (CodProdus,CodFurnizor,PretInt)
values (213,113,2.4);
insert into ProdusFurnizor (CodProdus,CodFurnizor,PretInt)
values (202,119,6);
insert into ProdusFurnizor (CodProdus,CodFurnizor,PretInt)
18
values (202,101,5.4);
insert into ProdusFurnizor (CodProdus,CodFurnizor,PretInt)
values (218,104,15);
insert into ProdusFurnizor (CodProdus,CodFurnizor,PretInt)
values (219,104,28);
insert into ProdusFurnizor (CodProdus,CodFurnizor,PretInt)
values (206,105,25);
insert into ProdusFurnizor (CodProdus,CodFurnizor,PretInt)
values (208,106,2);
insert into ProdusFurnizor (CodProdus,CodFurnizor,PretInt)
values (203,101,6);
insert into ProdusFurnizor (CodProdus,CodFurnizor,PretInt)
values (203,119,5);
insert into ProdusFurnizor (CodProdus,CodFurnizor,PretInt)
values (217,103,20);
insert into ProdusFurnizor (CodProdus,CodFurnizor,PretInt)
values (217,117,14.4);
insert into ProdusFurnizor (CodProdus,CodFurnizor,PretInt)
values (207,107,7);
insert into ProdusFurnizor (CodProdus,CodFurnizor,PretInt)
values (210,110,34);
insert into ProdusFurnizor (CodProdus,CodFurnizor,PretInt)
values (205,100,1.5);
insert into ProdusFurnizor (CodProdus,CodFurnizor,PretInt)
values (205,114,2);
insert into ProdusFurnizor (CodProdus,CodFurnizor,PretInt)
values (204,109,3);
19
--insert into Factura
insert into Factura (Serie,NrLeg,DataFact)
values ('FACT1000','10001',to_date('16052012','DDMMYYYY'));
insert into Factura (Serie,NrLeg,DataFact)
values ('FACT1008','10001',to_date('18052012','DDMMYYYY'));
insert into Factura (Serie,NrLeg,DataFact)
values ('FACT1119','10001',to_date('22052011','DDMMYYYY'));
insert into Factura (Serie,NrLeg,DataFact)
values ('FACT1001','10002',to_date('16052011','DDMMYYYY'));
insert into Factura (Serie,NrLeg,DataFact)
values ('FACT1002','10005',to_date('16052011','DDMMYYYY'));
insert into Factura (Serie,NrLeg,DataFact)
values ('FACT1055','10018',to_date('29052011','DDMMYYYY'));
insert into Factura (Serie,NrLeg,DataFact)
values ('FACT1111','10014',to_date('16062011','DDMMYYYY'));
insert into Factura (Serie,NrLeg,DataFact)
values ('FACT0054','10019',to_date('14082011','DDMMYYYY'));
insert into Factura (Serie,NrLeg,DataFact)
values ('FACT1044','10015',to_date('13072011','DDMMYYYY'));
insert into Factura (Serie,NrLeg,DataFact)
values ('FACT1032','10006',to_date('21082011','DDMMYYYY'));
insert into Factura (Serie,NrLeg,DataFact)
values ('FACT1132','10009',to_date('12072011','DDMMYYYY'));
insert into Factura (Serie,NrLeg,DataFact)
values ('FACT1094','10015',to_date('21092011','DDMMYYYY'));
insert into Factura (Serie,NrLeg,DataFact)
values ('FACT1083','10011',to_date('26022011','DDMMYYYY'));
insert into Factura (Serie,NrLeg,DataFact)
values ('FACT1356','10017',to_date('14122011','DDMMYYYY'));
insert into Factura (Serie,NrLeg,DataFact)
values ('FACT1567','10017',to_date('22112011','DDMMYYYY'));
insert into Factura (Serie,NrLeg,DataFact)
values ('FACT2000','10013',to_date('12012012','DDMMYYYY'));
insert into Factura (Serie,NrLeg,DataFact)
values ('FACT2011','10010',to_date('27052011','DDMMYYYY'));
insert into Factura (Serie,NrLeg,DataFact)
values ('FACT1863','10011',to_date('26072011','DDMMYYYY'));
insert into Factura (Serie,NrLeg,DataFact)
values ('FACT1006','10017',to_date('29082011','DDMMYYYY'));
insert into Factura (Serie,NrLeg,DataFact)
values ('FACT1014','10018',to_date('22012012','DDMMYYYY'));
20
------insert into Angajat
insert into Angajat values ('900','1900212160021','700','LACTA');
insert into Angajat values ('901','1934435160021','700','PATIS');
insert into Angajat values ('902','1900213424021','700','PATIS');
insert into Angajat values ('903','1900212162222','850','PANIF');
insert into Angajat values ('904','2880616131564','900','PANIF');
insert into Angajat values ('905','1860601167951','650','MEZEL');
insert into Angajat values ('906','1801212236578','900','MEZEL');
insert into Angajat values ('907','1910512168749','1100','BAUTR');
insert into Angajat values ('908','2880803123654','1144','BAUTA');
insert into Angajat values ('909','2691110155479','658','DULCE');
insert into Angajat values ('910','2830504698742','963','LEGFR');
insert into Angajat values ('911','1961212264789','800','VRAC');
insert into Angajat values ('912','1901221544895','800','PESTE');
insert into Angajat values ('913','1870307336896','700','PESTE');
insert into Angajat values ('914','1891115656899','700','CONS');
insert into Angajat values ('915','1881211644899','700','AUTO');
insert into Angajat values ('916','2851112160021','1500','ANIM');
insert into Angajat values ('917','2991112160021','1501','COPII');
insert into Angajat values ('918','1876543230021','800','HAINE');
insert into Angajat values ('919','2345662160021','700','ELCTR');
insert into Angajat values ('920','1900234560021','700','ELCTR');
insert into Angajat values ('921','2222212160931','850','SNACK');
insert into Angajat values ('922','1900212161234','1000','DETER');
insert into Angajat values ('923','1933212162221','800','CARNC');
insert into Angajat values ('924','1901111111021','1000','CARNP');
21
----Manager_Magazin
insert into Manager_Magazin values ('900','700');
insert into Manager_Magazin values ('901','600');
insert into Manager_Magazin values ('903','600');
insert into Manager_Magazin values ('906','650');
insert into Manager_Magazin values ('912','700');
insert into Manager_Magazin values ('920','700');
insert into Manager_Magazin values ('916','600');
insert into Manager_Magazin values ('908','755');
insert into Manager_Magazin values ('915','800');
insert into Manager_Magazin values ('923','650');
insert into Manager_Magazin values ('907','700');
insert into Manager_Magazin values ('923','600');
insert into Manager_Magazin values ('924','750');
----ProdCump
insert into ProdCump values ('FACT1000','200',1,'900',null);
insert into ProdCump values ('FACT1000','211',3,'902',null);
insert into ProdCump values ('FACT1001','240',1,'901',null);
insert into ProdCump values ('FACT1001','241',4,'903',null);
insert into ProdCump values ('FACT1008','200',2,'906',null);
insert into ProdCump values ('FACT1119','222',4,'907',null);
insert into ProdCump values ('FACT1055','215',1,'907',null);
insert into ProdCump values ('FACT1111','210',3,'908',null);
insert into ProdCump values ('FACT0054','211',1,'909',null);
insert into ProdCump values ('FACT0054','200',3,'909',null);
insert into ProdCump values ('FACT1044','230',2,'910',null);
insert into ProdCump values ('FACT1032','229',1,'902',null);
insert into ProdCump values ('FACT1132','222',1,'921',null);
insert into ProdCump values ('FACT1094','211',1,'922',null);
insert into ProdCump values ('FACT1083','213',2,'920',null);
insert into ProdCump values ('FACT1083','219',5,'917',null);
insert into ProdCump values ('FACT1083','240',3,'923',null);
22
insert into ProdCump values ('FACT1356','205',29,'919',null);
insert into ProdCump values ('FACT1567','205',6,'920',null);
insert into ProdCump values ('FACT2000','216',1,'918',null);
insert into ProdCump values ('FACT2000','233',3,'921',null);
insert into ProdCump values ('FACT2011','218',1,'920',null);
insert into ProdCump values ('FACT1863','212',2,'917',null);
insert into ProdCump values ('FACT1006','220',1,'920',null);
insert into ProdCump values ('FACT1006','221',1,'917',null);
insert into ProdCump values ('FACT1006','200',5,'919',null);
insert into ProdCump values ('FACT1006','211',7,'920',null);
insert into ProdCump values ('FACT1014','239',4,'917',null);
23
7. Interogari pe baza de date
Sa se afiseze alfabetic toate produsele care au cantitatea mai mare de 25.
select Denumire, Cantitate
from Produs
where Cantitate>25
order by Denumire;
Sa se afiseze pentru fiecare magazin numarul de produse existente (daca sunt mai multe
sau egale cu 2) si cantitatea acestora.
select Magazin.Denumire,
count(CodProdus) as "NUMAR PRODUSE",
sum(Cantitate) as CANTITATE
from Magazin inner join Produs on Magazin.CodMagazin=Produs.CodMagazin
group by Magazin.Denumire
having count(CodProdus)>=2;
24
Sa se afiseze persoanele care sunt angajati,dar nu sunt clienti si care sunt clienti si nu
sunt angajati.
25
Sa se afiseze persoanele care sunt angajati, dar nu sunt manageri de magazin.
26
Sa se afiseze pentru fiecare produs, furnizorii lui si pretul de intrare.
select *
from Persoana
where Adresa like '%Craiova%'
and
CNP in (select CNP from Client);
27
Sa se afiseze angajatii care nu sunt manageri de magazin si au salariul intre 700 si 1000.
select Nume
from Persoana
where CNP in (select CNP from Angajat
where Salariu between 700 and 1000
and IdAngajat not in (select IdAngajat from Manager_Magazin));
28
Sa se afiseze salariile angajatilor crescute cu 25% daca sunt mai mici de 700 si scazute cu
15% daca sunt mai mari de 3000.
select Nume,
case when Salariu<700
then Salariu*1.25
when Salariu>3000
then Salariu*0.85
else
Salariu
end
as "SALARIU RECALCULAT"
from Persoana inner join Angajat on Angajat.CNP=Persoana.CNP
order by Nume;
29
Sa se afiseze salariul total al Managerilor de Magazin
30
Sa se afiseze angajatii care sunt manageri de magazin si au salariul mai mic de 1000.
select Nume
from Persoana
where CNP in (select CNP from Angajat
where Salariu < 1000
and IdAngajat in (select IdAngajat from Manager_Magazin));
Sa se afiseze pentru clientii care nu sunt din Craiova, numarul facturilor lor
31
Sa se afiseze pretul cel mai mic al unui produs la care se gaseste acesta indiferent de
furnizor.
32
8. Functii
1) Sa se verifice daca o persoana este angajat si daca da, sa se verifice daca are salariul mai
mare decat o valoare data; functia returneaza un mesaj corespunzator.
Apelul functiei:
begin
dbms_output.put_line(ang_sal('2880616131564',700));
end;
Rezultatul obtinut:
33
2) Sa se calculeze cate produse cu denumirea f_denumire a cumparat clientul cu numele
f_nume.
Apelul functiei:
begin
dbms_output.put_line('Cantitatea cumparata de Ciocolata Poiana, de catre Popescu
Ion este: ' || prd_cump('Popescu Ion','Ciocolata Poiana'));
end;
Rezultatul obtinut:
34
9. Proceduri
1) Sa se creeze o procedura care actualizeaza preturile produselor, ca fiind minimul dintre
preturile de la furnizori. Daca acest pret nu exista, noul pret este 10
Apelul procedurii:
begin
UpdatePret;
end;
35
Rezultatul obtinut:
36
2) Sa se creeze o procedura care actualizeaza valoarea produselor din fiecare
factura ca fiind pretul din tabela Produs * cantitatea.
Apelul procedurii:
begin
ValoareProd;
end;
Rezultatul obtinut:
37
38
10. Trigger
Sa se creeze un trigger care sa se declanseze in momentul in care salariul scade cu mai mult de
75%.
create or replace trigger Salariu_update
before update of Salariu
on Angajat
for each row when (new.Salariu<old.Salariu *0.75)
begin
raise_application_error(-20000,'Valoarea noua este prea mica');
end;
Verificare:
update Angajat
set Salariu=200
where CNP='2880616131564';
Rezultatul obtinut:
39
11. Bibliografie
Suport de curs – Liana Stanescu
Platforme de laborator – Cosmin Stoica
Tutoriale SQL:
http://www.tutorialspoint.com/sql/sql-using-joins.htm
http://www.w3schools.com/sql/
http://www.sqlcourse.com/
40