Documente Academic
Documente Profesional
Documente Cultură
Filip Adriana Final Proiectgr1072 SGBD
Filip Adriana Final Proiectgr1072 SGBD
-Proiect SGBD-
Fabrica de Cosmetice
’’DreamLAND’’
Ianuarie 2022
B. Descriere problema
Tema proiectului este reprezentata de dezvoltarea unei noi fabrici de cosmetice, iar aceasta tine evidenta stocurilor de produse precum si
a vanzarilor efectuate. In plus programul ofera rapoarte cu vanzarile pe anumite perioade.
Am ales sa abordez aceasta tema, intrucat din totdeauna, femeile au visat să devină și mai frumoase. Pentru aceasta, a fost necesară dezvoltarea de
noi tehnici care să aducă profit. Astăzi, vânzarea de produse cosmetice este dezvoltată destul de larg. Astfel, aceasta este una dintre cele mai profitabile
afaceri. La urma urmei, o femeie este capabilă să își nege singură multe dorințe, dar nu și cea de achiziționare a produselor de înfrumusețare.
Pentru inceput, m-am gandit sa imi deschid propria fabrica de cosmetice cu numele “DreamLAND”. Stiu ca pe piața romaneasca există o
concurență destul de mare între producătorii de produse cosmetice. De aceea, puțini oameni consideră această afacere promițătoare pentru ei înșiși. Cu
toate acestea, în ciuda scării mari a pieței, simt ca pot găsi o anumită nișă și să încep să produc propriile produse cosmetice cu o investiție inițială mică.
Deci…De unde să încep? Un plan de afaceri este compilat în prealabil. Producția de produse cosmetice, precum și toate etapele activităților
pregătitoare ar trebui descrise în acest document. În primul rând, trebuie studiată cererea consumatorilor. Acest lucru va permite producția de produse
cosmetice adaptate dorințelor lor. Pentru începători, cum sunt si eu, lansarea și vânzarea produselor care includ numai ingrediente naturale pot fi de
interes deosebit. Este imposibil să se producă astfel de produse cosmetice la scară industrială, deoarece substanțele naturale nu pot fi păstrate mult timp.
Pentru a preveni stricarea, se adaugă emulsifianți și conservanți la produsele finite. Producția de produse cosmetice constând numai din ingrediente
naturale este la îndemâna micilor antreprenori. Acestea pot garanta calitatea înaltă a produselor lor prin dezvoltarea propriilor rețete și eliberarea de
bunuri la comandă.
Cosmeticele naturale nu conțin aditivi chimici nocivi.Le produc pe baza de extracte de plante medicinale. Zerul, uleiurile naturale și alte
ingrediente naturale sunt utilizate în aceste produse. Produsele care se vor vinde vor fi disponibile atat pentru femei cat si pentru barbate, iar acestea vor
fi adaptate pentru fiecare persoana in parte, in functie de tipul tenului, pielii, parului.
Imi voi creea propria mea baza de date care sa stocheze informatiile de gestionare a fabricii “DreamLand”.
Pentru aceasta am folosit urmatoarele tabele: PRODUSE, COMENZI, CLIENTI, ANGAJATI, FUNCTII, DEPARTAMENTE, LOCATII,
TRANSPORT, MATERII_PRIME, COMPONENTA_PRODUSE.
-FILIP_PRODUSE cu structura: id_produs(number( 5)), denumire_produs(varchar2(50)), categorie(varchar2(20)),
utilizare(varchar2(50)), pret(number(4)), dimensiune(varchar2(6)),data_expirare(timestamp with local time
zone(6)),id_componenta_produs(number(5)), id_materie_prima(number(5)); Cheia primara o reprezinta id_produs, iar foreign key este
id_componenta_produs si id_materie_prima;
-FILIP_COMENZI cu structura:id_comanda(number(12)), id_produs(number(5), id_client(number(6), id_angajat(number(6)),
data(timestamp with local time zone(6)), suma_de_achitat(number(10)), stare_comanda(varchar2(60)), modalitate_plata(varchar2(50)); Cheia
primara o reprezinta id_comanda, iar foreign key este id_produs, id_client si id_angajat;
-FILIP_CLIENTI cu structura: id_client(number(6)), nume_client(varchar2(50)), prenume_client(varchar2(50)),
telefon_client(varchar2(15)), email_client(varchar2(30)), adresa_client(varchar2(100)); Cheia primara este id_client.
-FILIP_ANGAJATI cu structura: id_angajat(number(6)) ,nume(varchar2(20)),prenume(varchar2(20)),telefon (varchar2(20)), email(varchar2(30)),
id_functie(number(6)), id_departament(number(6)), data_angajare(timestamp with local time zone(6)). Cheia primara este id_angajat, iar foreign key
este id_functie si id_departament;
-FILIP_FUNCTII cu structura id_functie(number(6)), denumire_functie(varchar2(20)), salariu(number(8)). Cheia primara este id_functie.
-FILIP_DEPARTAMENTE cu structura: id_departament(number(6)), denumire_departament(varchar2(20)). Cheia primara este id_departament.
-FILIP_LOCATII cu structura id_locatie(number(5)), oras(varchar2(30)), cod_postal(varchar2(10)).Cheia primara este id_locatie;
-FILIP_TRANSPORT cu structura id_transport(number(5)), id_angajat(number(6Q)), tip_vehicul(varchar2(20)), id_locatie(number(5)),
id_comanda(number(12)); Cheia primara este id_transport, iar foreign key este reprezentat de id_angajat, id_locatie si id_comanda.
-FILIP_COMPONENTA_PRODUSE cu structura id_componenta_produs(number(5)), id_materie_prima(number(5)),
componenta_produs(varchar2(1000)). Cheia primara este id_componenta_produs, iar foreign key este id_materie_prima.
-FILIP_MATERII _PRIME cu structura id_materie_prima(number(5)), cantitate(varchar2(20)), materie_prima(varchar2(200)). Cheia primara este
id_materie_prima.
Un client poate solicita mai multe tipuri de produse intr-o singura comanda.Un client poate face mai multe comenzi, la date diferite, sau in aceeasi
zi, poate adauga alte produse pe o comanda existenta. Produsele de pe o comanda se livreaza in acelasi timp.
Fiecare produs are o component diferita si o materie prima care se prelucreaza.
Fiecare comanda contine unul sau mai multe produse care se vor livra la un anumit client, de un anumit angajat la fabricii care se incadreaza in
departamentul de transporturi.
Fiecare angajat are o functie bine definita si apartine unui anumit department.
Pentru rubrica de transport este alocat un anumit angajat care se ocupa de partea de transport, primind astfel comanda clientului si adresa locatiei
unde trebuie trimise produsele comandate.
Fiind la inceput de drum nu am o gama prea larga de produse, nu am nici un numar mare de angajati, acestia fiind 11 la numar.
C. Schema conceptuala:
D. Crearea tabelelor si adaugarea datelor–, legături între tabele
şi restricţii de integritate. CREATE, ALTER, DROP asupra
tabelelor :
CHEILE PRIMARE+ CHEILE EXTERNE= ASIGURA LEGATURILE INTRE TABELE
Cheia primara:
alter table FILIP_PRODUSE
add constraint ID_PRODUS_pk primary key(ID_PRODUS);
CREAREA TABELEI FILIP_COMPONENTA_PRODUSE
create table FILIP_COMPONENTA_PRODUSE(
ID_COMPONENTA_PRODUS number(5),
ID_MATERIE_PRIMA number(5),
COMPONENTA_PRODUS varchar2(1000)
);
Cheia primara:
alter table FILIP_COMPONENTA_PRODUSE
add constraint ID_COMPONENTA_PRODUS_pk primary key(ID_COMPONENTA_PRODUS);
Cheia primara:
alter table FILIP_MATERII_PRIME
add constraint ID_MATERIE_PRIMA_pk primary key(ID_MATERIE_PRIMA);
CREAREA TABELEI FILIP_FUNCTII:
create table FILIP_FUNCTII(
ID_FUNCTIE number(6),
DENUMIRE_FUNCTIE varchar2(20),
SALARIU number(8)
);
Cheia primara:
alter table FILIP_FUNCTII
add constraint ID_FUNCTIE_pk primary key(ID_FUNCTIE);
Cheia primara:
alter table FILIP_DEPARTAMENTE
add constraint ID_DEPARTAMENT_pk primary key(ID_DEPARTAMENT);
Cheia primara:
alter table FILIP_LOCATII
add constraint ID_LOCATIE_pk primary key(ID_LOCATIE);
Cheia primara:
alter table FILIP_CLIENTI
add constraint ID_CLIENT_pk primary key(ID_CLIENT);
Cheia primara:
alter table FILIP_TRANSPORT
add constraint ID_TRANSPORT_pk primary key(ID_TRANSPORT);
alter table FILIP_COMENZI
add constraint ID_COMANDA_pk primary key(ID_COMANDA);
Cheia primara:
alter table FILIP_ANGAJATI
add constraint ID_ANGAJAT_pk primary key(ID_ANGAJAT);
alter table FILIP_Produse
add constraint Prod_Mat_fk foreign key(ID_PRODUS)
references FILIP_MATERII_PRIME(ID_MATERIE_PRIMA);
alter table FILIP_COMPONENTA_PRODUSE
add constraint Comp_Mat_fk foreign key(ID_COMPONENTA_PRODUS)
references FILIP_MATERII_PRIME(ID_MATERIE_PRIMA);
alter table FILIP_COMENZI
add constraint Comen_Prod_fk foreign key(ID_COMANDA)
references FILIP_PRODUSE(ID_PRODUS);
alter table FILIP_COMENZI
add constraint Comen_Clie_fk foreign key(ID_COMANDA)
references FILIP_CLIENTI(ID_CLIENT);
alter table FILIP_COMENZI
add constraint Comen_Angj_fk foreign key(ID_COMANDA)
references FILIP_ANGAJATI(ID_ANGAJAT);
alter table FILIP_ANGAJATI
add constraint Angj_Fnct_fk foreign key(ID_ANGAJAT)
references FILIP_FUNCTII(ID_FUNCTIE);
alter table FILIP_ANGAJATI
add constraint Angj_Depart_fk foreign key(ID_ANGAJAT)
references FILIP_DEPARTAMENTE(ID_DEPARTAMENT);
alter table FILIP_TRANSPORT
add constraint Transp_Angj_fk foreign key(ID_TRANSPORT)
references FILIP_ANGAJATI(ID_ANGAJAT);
alter table FILIP_TRANSPORT
add constraint Transp_Loca_fk foreign key(ID_TRANSPORT)
references FILIP_LOCATII(ID_LOCATIE);
alter table FILIP_TRANSPORT
add constraint Transp_Comen_fk foreign key(ID_TRANSPORT)
references FILIP_COMENZI(ID_COMANDA);
Am creat o tabela imaginara pentru ca mai apoi sa o sterg cu ajutorul comenzii drop :
alter table FILIP_firme
add constraint ID_firma_pk primary key(ID_firma);
drop table FILIP_firme cascade constraints;
insert into FILIP_COMPONENTA_PRODUSE(ID_COMPONENTA_PRODUS,ID_MATERIE_PRIMA,COMPONENTA_PRODUS)
values(1,1,'NCI – Citrus Aurantifolia and Citrus Medica Limonum');
insert into FILIP_COMPONENTA_PRODUSE(ID_COMPONENTA_PRODUS,ID_MATERIE_PRIMA,COMPONENTA_PRODUS)
values(2,2,'Extract de ginseng. INCI – Panx Ginseng Extract');
insert into FILIP_COMPONENTA_PRODUSE(ID_COMPONENTA_PRODUS,ID_MATERIE_PRIMA,COMPONENTA_PRODUS)
values(3,3,'Extract de miere. INCI – Honey Extract');
insert into FILIP_COMPONENTA_PRODUSE(ID_COMPONENTA_PRODUS,ID_MATERIE_PRIMA,COMPONENTA_PRODUS)
values(4,4,'Extract concentrat din seminte nonfermentate de cafea verde. INCI – Coffee Robusta Seed Extrac');
insert into FILIP_COMPONENTA_PRODUSE(ID_COMPONENTA_PRODUS,ID_MATERIE_PRIMA,COMPONENTA_PRODUS)
values(5,5,'INCI – Glyceryl Stearate');
insert into FILIP_COMPONENTA_PRODUSE(ID_COMPONENTA_PRODUS,ID_MATERIE_PRIMA,COMPONENTA_PRODUS)
values(6,6,'Extract natural apos obtinut din fruct (bob de strugure). Contine doar arome naturale. INCI – Vitis Vinifera Fruit Extract');
insert into FILIP_COMPONENTA_PRODUSE(ID_COMPONENTA_PRODUS,ID_MATERIE_PRIMA,COMPONENTA_PRODUS)
values(7,7,'Extract de aloe vera.Aloe barbadensis este una dintre cele mai bogate aloe, cu un continut de 75 de substante nutritive, 20 mine
rale, 18 vitamine si 12 aminoacizi, care sunt prezente in mod natural din pulpa. INCI – Aloe Barbadensis Extract');
insert into FILIP_COMPONENTA_PRODUSE(ID_COMPONENTA_PRODUS,ID_MATERIE_PRIMA,COMPONENTA_PRODUS)
values(8,8,'INCI – Fucus Vesiculosus Extract');
insert into FILIP_COMPONENTA_PRODUSE(ID_COMPONENTA_PRODUS,ID_MATERIE_PRIMA,COMPONENTA_PRODUS)
values(9,9,'Mixtura de alcooli grasi. INCI – Cetearyl Alcohol');
insert into FILIP_COMPONENTA_PRODUSE(ID_COMPONENTA_PRODUS,ID_MATERIE_PRIMA,COMPONENTA_PRODUS)
values(10,10,'Extract de flori uscate de Arnica montana L., Asteraceae
INCI – Arnica Montana Flower Extract');
insert into FILIP_COMPONENTA_PRODUSE(ID_COMPONENTA_PRODUS,ID_MATERIE_PRIMA,COMPONENTA_PRODUS)
values(11,11,'INCI-Glycerin-Water-Euterpe Oleracea Fruit Extract');
Atasez un printscreen cu datele introduse:
Am introdus date in tabela FILIP_PRODUSE:
insert into FILIP_PRODUSE(ID_PRODUS,denumire_produs, categorie,utilizare,pret,data_expirare,dimensiune,ID_COMPONENTA_PRODUS,ID_MATERIE_PRIMA
)
values(1,'Face My Way','Masca Faciala','Femei',599,to_date('03-01-2021', 'dd-mm-yyyy'),'mic',1,1);
insert into FILIP_PRODUSE(ID_PRODUS,denumire_produs, categorie,utilizare,pret,data_expirare,dimensiune,ID_COMPONENTA_PRODUS,ID_MATERIE_PRIMA
)
values(2,'True Match','Fond De Ten','Femei',190,to_date('02-02-2021', 'dd-mm-yyyy'),'mic',2,2);
insert into FILIP_PRODUSE(ID_PRODUS,denumire_produs, categorie,utilizare,pret,data_expirare,dimensiune,ID_COMPONENTA_PRODUS,ID_MATERIE_PRIMA
)
values(3,'Perfect Primer','Baza De Machiaj','Femei',60,to_date('01-05-2021', 'dd-mm-yyyy'),'mediu',3,3);
insert into FILIP_PRODUSE(ID_PRODUS,denumire_produs, categorie,utilizare,pret,data_expirare,dimensiune,ID_COMPONENTA_PRODUS,ID_MATERIE_PRIMA
)
values(4,'MuglerAlien','CremaCorp','Femei',500,to_date('03-04-2021', 'dd-mm-yyyy'),'mediu',4,4);
insert into FILIP_PRODUSE(ID_PRODUS,denumire_produs, categorie,utilizare,pret,data_expirare,dimensiune,ID_COMPONENTA_PRODUS,ID_MATERIE_PRIMA
)
values(5,'Smooth Me','BalsamBarbierit','Barbati',100,to_date('30-05-2021', 'dd-mm-yyyy'),'mediu',5,5);
insert into FILIP_PRODUSE(ID_PRODUS,denumire_produs, categorie,utilizare,pret,data_expirare,dimensiune,ID_COMPONENTA_PRODUS,ID_MATERIE_PRIMA
)
values(6,'BodyFarm','LapteCorp','Femei',110,to_date('15-06-2021', 'dd-mm-yyyy'),'mare',6,6);
insert into FILIP_PRODUSE(ID_PRODUS,denumire_produs, categorie,utilizare,pret,data_expirare,dimensiune,ID_COMPONENTA_PRODUS,ID_MATERIE_PRIMA
)
values(7,'Clarins','Demachiant','Femei',70,to_date('16-07-2021', 'dd-mm-yyyy'),'mare',7,7);
insert into FILIP_PRODUSE(ID_PRODUS,denumire_produs, categorie,utilizare,pret,data_expirare,dimensiune,ID_COMPONENTA_PRODUS,ID_MATERIE_PRIMA
)
values(8,'JoicoHair','BalsamPar','Femei',255,to_date('24-08-2021', 'dd-mm-yyyy'),'mare',8,8);
insert into FILIP_PRODUSE(ID_PRODUS,denumire_produs, categorie,utilizare,pret,data_expirare,dimensiune,ID_COMPONENTA_PRODUS,ID_MATERIE_PRIMA
)
values(9,'ClubMan','IngrijireBarba','Barbati',130,to_date('23-09-2021', 'dd-mm-yyyy'),'mare',9,9);
insert into FILIP_PRODUSE(ID_PRODUS,denumire_produs, categorie,utilizare,pret,data_expirare,dimensiune,ID_COMPONENTA_PRODUS,ID_MATERIE_PRIMA
)
values(10,'HairCream','IngrijirePar','Barbati',80,to_date('09-11-2021', 'dd-mm-yyyy'),'mic',10,10);
insert into FILIP_PRODUSE(ID_PRODUS,denumire_produs, categorie,utilizare,pret,data_expirare,dimensiune,ID_COMPONENTA_PRODUS,ID_MATERIE_PRIMA
)
values(11,'HairStyles','Balsam Par Aspru','Barbati',690,to_date('05-12-2021', 'dd-mm-yyyy'),'mediu',11,11);
Atasez un printscreen cu datele introduse:
Am introdus date in tabela FILIP_LOCATII:
insert into FILIP_Locatii(id_locatie,oras,cod_postal)
values (1,'Constanta',900541);
insert into FILIP_Locatii(id_locatie,oras,cod_postal)
values (2,'Bucuresti',100542);
insert into FILIP_Locatii(id_locatie,oras,cod_postal)
values (3,'Cluj',20054);
insert into FILIP_Locatii(id_locatie,oras,cod_postal)
values (4,'Timisoara',300543);
insert into FILIP_Locatii(id_locatie,oras,cod_postal)
values (5,'Tulcea',400544);
insert into FILIP_Locatii(id_locatie,oras,cod_postal)
values (6,'Brasov',500545);
insert into FILIP_Locatii(id_locatie,oras,cod_postal)
values (7,'Sinaia',600546);
insert into FILIP_Locatii(id_locatie,oras,cod_postal)
values (8,'Galati',700547);
insert into FILIP_Locatii(id_locatie,oras,cod_postal)
values (9,'Iasi',100058);
insert into FILIP_Locatii(id_locatie,oras,cod_postal)
values (10,'Sibiu',200059);
insert into FILIP_Locatii(id_locatie,oras,cod_postal)
values (11,'Constanta',900540);
Atasez un printscreen cu datele introduse:
Am introdus date in tabela FILIP_CLIENTI :
insert into FILIP_Clienti(id_client,nume_client,prenume_client,telefon_client,email_client,adresa_client)
values(1,'Filip','Adriana-Ioana','0733976227','drnafilip@gmail.com','str Marii,nr 29,Cumpana,Constanta');
insert into FILIP_Clienti(id_client,nume_client,prenume_client,telefon_client,email_client,adresa_client)
values(2,'Popescu','Ion','0733976266','popescu@gmail.com','str Soarelui,nr 20,Sibiu');
insert into FILIP_Clienti(id_client,nume_client,prenume_client,telefon_client,email_client,adresa_client)
values(3,'Ionescu','Mirel','0733987877','mirel@gmail.com','str Pescar,nr 28,Galati');
insert into FILIP_Clienti(id_client,nume_client,prenume_client,telefon_client,email_client,adresa_client)
values(4,'Fuduli','AnaMaria','0733888227','fuduli@gmail.com','str Pahar,nr 5,Iasi');
insert into FILIP_Clienti(id_client,nume_client,prenume_client,telefon_client,email_client,adresa_client)
values(5,'Caftanat','Dorel','0744976227','ionelc@gmail.com','str Rotilor,nr 3,Brasov');
insert into FILIP_Clienti(id_client,nume_client,prenume_client,telefon_client,email_client,adresa_client)
values(6,'Valeanu','Iulia','0733000227','iuliav@gmail.com','str Zorelelor,nr 90,Sinaia');
insert into FILIP_Clienti(id_client,nume_client,prenume_client,telefon_client,email_client,adresa_client)
values(7,'Postaru','Alexandra','0743121554','postaruale@gmail.com','str Traian,nr 2,Constanta');
insert into FILIP_Clienti(id_client,nume_client,prenume_client,telefon_client,email_client,adresa_client)
values(8,'Luta','Vlad','0733777777','lutavlad@yahoo.com','str Tulcei,nr 12,Bucuresti');
insert into FILIP_Clienti(id_client,nume_client,prenume_client,telefon_client,email_client,adresa_client)
values(9,'Preda','Nicoleta','0799976227','nicopreda@yahoo.com','str Morii,nr 11,Timisoara');
insert into FILIP_Clienti(id_client,nume_client,prenume_client,telefon_client,email_client,adresa_client)
values(10,'Coman','Roxana','0777776227','comroxp@gmail.com','str Dorului,nr 122,Tulcea');
insert into FILIP_Clienti(id_client,nume_client,prenume_client,telefon_client,email_client,adresa_client)
values(11,'Pascu','Ioana','0737788897','pascuioa@yahoo.com','str Arcului,nr 23,Cluj');
Atasez printscreen cu datele introduse:
Am introdus date in tabela FILIP_FUNCTII:
insert into FILIP_FUNCTII(ID_FUNCTIE,denumire_functie,salariu)
values(1,'ManagerGeneral',7000);
insert into FILIP_FUNCTII(ID_FUNCTIE,denumire_functie,salariu)
values(2,'ManagerFinanciar',6500);
insert into FILIP_FUNCTII(ID_FUNCTIE,denumire_functie,salariu)
values(3,'ManagerDeProductie',6600);
insert into FILIP_FUNCTII(ID_FUNCTIE,denumire_functie,salariu)
values(4,'ManagerDeVanzari',6700);
insert into FILIP_FUNCTII(ID_FUNCTIE,denumire_functie,salariu)
values(5,'Curier',6200);
insert into FILIP_FUNCTII(ID_FUNCTIE,denumire_functie,salariu)
values(6,'ContabilSef',4500);
insert into FILIP_FUNCTII(ID_FUNCTIE,denumire_functie,salariu)
values(7,'DirectorOperatiuni',6500);
insert into FILIP_FUNCTII(ID_FUNCTIE,denumire_functie,salariu)
values(8,'Secretar',2500);
insert into FILIP_FUNCTII(ID_FUNCTIE,denumire_functie,salariu)
values(9,'Casier',2000);
insert into FILIP_FUNCTII(ID_FUNCTIE,denumire_functie,salariu)
values(10,'Informatician',5000);
insert into FILIP_FUNCTII(ID_FUNCTIE,denumire_functie,salariu)
values(11,'Contabil',2500);
Atasez printscreen cu datele introduse:
Am introdus date in tabela FILIP_DEPARTAMENTE:
insert into FILIP_DEPARTAMENTE(id_departament,denumire_departament)
values(1,'Marketing');
insert into FILIP_DEPARTAMENTE(id_departament,denumire_departament)
values(2,'Investitii');
insert into FILIP_DEPARTAMENTE(id_departament,denumire_departament)
values(3,'Juridic');
insert into FILIP_DEPARTAMENTE(id_departament,denumire_departament)
values(4,'Contabilitate');
insert into FILIP_DEPARTAMENTE(id_departament,denumire_departament)
values(5,'Livrari&Curierat');
insert into FILIP_DEPARTAMENTE(id_departament,denumire_departament)
values(6,'IT');
insert into FILIP_DEPARTAMENTE(id_departament,denumire_departament)
values(7,'Depozitare');
insert into FILIP_DEPARTAMENTE(id_departament,denumire_departament)
values(8,'Aprovizionare');
insert into FILIP_DEPARTAMENTE(id_departament,denumire_departament)
values(9,'Administrativ');
insert into FILIP_DEPARTAMENTE(id_departament,denumire_departament)
values(10,'CercetareDezvoltare');
insert into FILIP_DEPARTAMENTE(id_departament,denumire_departament)
values(11,'AsigurareaCalitatii');
Atasez un printscreen cu datele introduse:
Am introdus date in tabela FILIP_ANGAJATI:
insert into FILIP_Angajati(id_angajat,nume,prenume,telefon,email,data_angajare,ID_FUNCTIE,id_departament)
values(1,'Dorel','Ionel','0700000000','doreli@gmail.com',to_date('30-01-2020', 'dd-mm-yyyy'),1,1);
insert into FILIP_Angajati(id_angajat,nume,prenume,telefon,email,data_angajare,ID_FUNCTIE,id_departament)
values(2,'Birsan','Aurelia','0700000001','aurab@gmail.com',to_date('03-05-2020', 'dd-mm-yyyy'),2,2);
insert into FILIP_Angajati(id_angajat,nume,prenume,telefon,email,data_angajare,ID_FUNCTIE,id_departament)
values(3,'Irene','Ionela','0700000002','irenei@gmail.com',to_date('02-06-2020', 'dd-mm-yyyy'),3,3);
insert into FILIP_Angajati(id_angajat,nume,prenume,telefon,email,data_angajare,ID_FUNCTIE,id_departament)
values(4,'Vasilache','Dora','0700000003','dorav@yahoo.com',to_date('16-07-2020', 'dd-mm-yyyy'),4,4);
insert into FILIP_Angajati(id_angajat,nume,prenume,telefon,email,data_angajare,ID_FUNCTIE,id_departament)
values(5,'Celmare','Mihai','0700000004','mihaai@gmail.com',to_date('23-08-2020', 'dd-mm-yyyy'),5,5);
insert into FILIP_Angajati(id_angajat,nume,prenume,telefon,email,data_angajare,ID_FUNCTIE,id_departament)
values(6,'Vizoc','Maria','0700000005','mariav@gmail.com',to_date('15-09-2020', 'dd-mm-yyyy'),6,6);
insert into FILIP_Angajati(id_angajat,nume,prenume,telefon,email,data_angajare,ID_FUNCTIE,id_departament)
values(7,'Celmic','Mariana','0700000006','marianac@gmail.com',to_date('12-10-2020', 'dd-mm-yyyy'),7,7);
insert into FILIP_Angajati(id_angajat,nume,prenume,telefon,email,data_angajare,ID_FUNCTIE,id_departament)
values(8,'Micalcescu','Matias','0700000007','mattias@yahoo.com',to_date('09-11-2020', 'dd-mm-yyyy'),8,8);
insert into FILIP_Angajati(id_angajat,nume,prenume,telefon,email,data_angajare,ID_FUNCTIE,id_departament)
values(9,'Luta','Argentina','0700000008','tinal@gmail.com',to_date('08-12-2020', 'dd-mm-yyyy'),9,9);
insert into FILIP_Angajati(id_angajat,nume,prenume,telefon,email,data_angajare,ID_FUNCTIE,id_departament)
values(10,'Filip','Daniela','0700000009','filipd@yahoo.com',to_date('24-01-2020', 'dd-mm-yyyy'),10,10);
insert into FILIP_Angajati(id_angajat,nume,prenume,telefon,email,data_angajare,ID_FUNCTIE,id_departament)
values(11,'Agbas','Iuliana','0700000011','iuliagb@gmail.com',to_date('23-02-2020', 'dd-mm-yyyy'),11,11);
Atasez printscreem cu datele introduse:
Am introdus date in tabela FILIP_COMENZI:
insert into FILIP_Comenzi(id_comanda,id_produs,id_client,id_angajat,data,suma_de_achitat,stare_comanda,modalitate_plata)
values(1,1,1,1,to_date('03-01-2020', 'dd-mm-yyyy'),599,'IN CURS DE LIVRARE','ramburs');
insert into FILIP_Comenzi(id_comanda,id_produs,id_client,id_angajat,data,suma_de_achitat,stare_comanda,modalitate_plata)
values(2,2,2,2,to_date('02-02-2020', 'dd-mm-yyyy'),190,'EXPEDIAT','card');
insert into FILIP_Comenzi(id_comanda,id_produs,id_client,id_angajat,data,suma_de_achitat,stare_comanda,modalitate_plata)
values(3,3,3,3,to_date('04-01-2020', 'dd-mm-yyyy'),60,'IN CURS DE LIVRARE','card');
insert into FILIP_Comenzi(id_comanda,id_produs,id_client,id_angajat,data,suma_de_achitat,stare_comanda,modalitate_plata)
values(4,4,4,4,to_date('05-01-2020', 'dd-mm-yyyy'),500,'EXPEDIAT','card');
insert into FILIP_Comenzi(id_comanda,id_produs,id_client,id_angajat,data,suma_de_achitat,stare_comanda,modalitate_plata)
values(5,5,5,5,to_date('06-01-2020', 'dd-mm-yyyy'),100,'PROCESARE COMANDA','ramburs');
insert into FILIP_Comenzi(id_comanda,id_produs,id_client,id_angajat,data,suma_de_achitat,stare_comanda,modalitate_plata)
values(6,6,6,6,to_date('07-01-2020', 'dd-mm-yyyy'),110,'IN CURS DE LIVRARE','ramburs');
insert into FILIP_Comenzi(id_comanda,id_produs,id_client,id_angajat,data,suma_de_achitat,stare_comanda,modalitate_plata)
values(7,7,7,7,to_date('08-01-2020', 'dd-mm-yyyy'),70,'PROCESARE COMANDA','ramburs');
insert into FILIP_Comenzi(id_comanda,id_produs,id_client,id_angajat,data,suma_de_achitat,stare_comanda,modalitate_plata)
values(8,8,8,8,to_date('09-01-2020', 'dd-mm-yyyy'),255,'PROCESARE COMANDA','card');
insert into FILIP_Comenzi(id_comanda,id_produs,id_client,id_angajat,data,suma_de_achitat,stare_comanda,modalitate_plata)
values(9,9,9,9,to_date('10-11-2020', 'dd-mm-yyyy'),130,'PROCESARE COMANDA','card');
insert into FILIP_Comenzi(id_comanda,id_produs,id_client,id_angajat,data,suma_de_achitat,stare_comanda,modalitate_plata)
values(10,10,10,10,to_date('03-02-2020', 'dd-mm-yyyy'),80,'IN CURS DE LIVRARE','card');
insert into FILIP_Comenzi(id_comanda,id_produs,id_client,id_angajat,data,suma_de_achitat,stare_comanda,modalitate_plata)
values(11,11,11,11,to_date('03-03-2020', 'dd-mm-yyyy'),690,'EXPEDIAT','ramburs');
Atasez printscreen cu datele introduse:
Am introdus date in tabela FILIP_TRANSPORT:
insert into FILIP_Transport(id_transport,id_angajat,id_locatie,id_comanda,tip_vehicul)
values(1,5,1,1,'autoturism');
insert into FILIP_Transport(id_transport,id_angajat,id_locatie,id_comanda,tip_vehicul)
values(2,5,2,2,'furgoneta');
insert into FILIP_Transport(id_transport,id_angajat,id_locatie,id_comanda,tip_vehicul)
values(3,5,3,3,'furgoneta');
insert into FILIP_Transport(id_transport,id_angajat,id_locatie,id_comanda,tip_vehicul)
values(4,5,4,4,'camion');
insert into FILIP_Transport(id_transport,id_angajat,id_locatie,id_comanda,tip_vehicul)
values(5,5,5,5,'camion');
insert into FILIP_Transport(id_transport,id_angajat,id_locatie,id_comanda,tip_vehicul)
values(6,5,6,6,'autoturism');
insert into FILIP_Transport(id_transport,id_angajat,id_locatie,id_comanda,tip_vehicul)
values(7,5,7,7,'autoturism');
insert into FILIP_Transport(id_transport,id_angajat,id_locatie,id_comanda,tip_vehicul)
values(8,5,8,8,'furgoneta');
insert into FILIP_Transport(id_transport,id_angajat,id_locatie,id_comanda,tip_vehicul)
values(9,5,9,9,'camion');
insert into FILIP_Transport(id_transport,id_angajat,id_locatie,id_comanda,tip_vehicul)
values(10,5,10,10,'camion');
insert into FILIP_Transport(id_transport,id_angajat,id_locatie,id_comanda,tip_vehicul)
values(11,5,11,11,'autoturism');
Atasez printscreen cu datele introduse:
E. Blocuri PL/SQL continand structuri de control variate(min 4)
Interactiunea cu serverul Oracle prin intermediul comenzilor SQL
1. Sa se majoreze pretul produselor al caror pret actual este mai mic de 500 de lei cu 20%.
set serveroutput on;
declare
procent number:=0.2;
begin
update filip_produse set pret=(pret*procent)+pret where pret<500;
end;
/
2. Să se modifice toate denumirile departamentelor astfel încât acestea să fie scrise cu litere mari.
begin
update filip_departamente
set denumire_departament=upper(denumire_departament);
end;
/
3. Sa se afiseze numele, telefonul si data comenzii pentru clientul care a avut id-ul comenzii egal cu 8
declare
v_nume filip_clienti.nume%type;
v_tel filip_clienti.telefon_client%type;
v_data filip_comenzi.data%type;
begin
select nume_client, telefon_client, data into v_nume, v_tel, v_data from filip_comenzi c, filip_clienti
a
where c.id_client=a.id_client and c.id_comanda=8;
dbms_output.put_line('Clientul '||v_nume||' are telefonul '||v_tel||' si a cumparat produsele dorite la
data de '||v_data);
end;
/
4.Comparati pretul produselor avand id-ul citit de la tastatura, cu o variabila egala cu 500 si afisati un mesaj.
set serveroutput on
declare
variabila number(5):=500;
pret_p filip_produse.pret%type;
begin
select pret into pret_p from filip_produse where id_produs=&p;
if pret_p<variabila
then dbms_output.put_line('Produs ieftin');
elsif pret_p=variabila
then dbms_output.put_line('Produs mediu');
else dbms_output.put_line('Produs scump');
end if;
end;
/
5. Sa se afiseze in ordine produsele cu id_ul intre 1 si 11, atata timp cat pretul acestora este mai mic decat pretul mediu
declare
pret_p filip_produse.pret%type;
pret_mediu pret_p%type;
i number(4):=1;
begin
loop
select avg(pret) into pret_mediu from filip_produse;
select pret into pret_p from filip_produse where id_produs=i;
if pret_p < pret_mediu and i<12
then dbms_output.put_line('Produsul cu id-ul'||i||' are pretul:'||pret_p);
end if;
i:=i+1;
exit when i>11;
end loop;
end;
/
6. Să se afișeze folosind un bloc PL/SQL numele si prenumele tuturor angajatilor folosind o structură repetitivă de tip FOR.
declare
v_min filip_angajati.id_angajat%type;
v_max filip_angajati.id_angajat%type;
v_nume filip_angajati.nume%type;
v_prenume filip_angajati.prenume%type;
begin
select min(id_angajat), max(id_angajat) into v_min, v_max from filip_angajati;
for i IN v_min..v_max LOOP
select nume, prenume into v_nume, v_prenume FROM filip_angajati where id_angajat=i;
dbms_output.put_line(v_nume||' '||v_prenume);
end loop;
end;
/
7. Să se afișeze toate produsele folosind o structură repetitivă WHILE.
declare
i filip_produse.id_produs%type;
v_min filip_produse.id_produs%type;
v_max filip_produse.id_produs%type;
v_den filip_produse.denumire_produs%type;
begin
select min(id_produs), max(id_produs) into v_min, v_max from filip_produse;
i:=v_min;
while i<=v_max loop
select denumire_produs into v_den from filip_produse where id_produs=i;
i:=i+1;
dbms_output.put_line(v_den);
end loop;
end;
/
F. Utilizarea cursorilor si a exceptiilor in cadrul blocurilor
PL/SQL(min 4)
1. Creati un bloc PL/SQL prin care sa cresteti cu 25% salariul angajatilor cu functia primita de la tastatura.Afisati numarul de inregistrari
modificate. Ridicati o exceptie in cazul in care nu sunt modificari.
declare
id_fun filip_functii.denumire_functie%type:='&p';
e exception;
begin
update filip_functii set salariu=1.25*salariu where id_functie in(select id_functie from filip_functii where denumire_functie=id_fun);
if sql%rowcount=0
then raise e;
else dbms_output.put_line('Numarul de modificari este'||sql%rowcount);
end if;
exception
when e
then dbms_output.put_line('Nu s-a facut nicio modificare');
end;
/
2. Să se modifice salariul angajatului cu id-ul 19. Dacă angajatul nu există sau dacă o altă eroare apare să fie ridicată o excepție.
set serveroutput on
declare
exceptie exception;
begin
update filip_functii
set salariu=salariu+(0.05*salariu)
where id_functie=19;
if sql%notfound then
raise exceptie;
end if;
exception
when exceptie then
dbms_output.put_line('Nu exista angajatul cu aceasta functie');
when others then
dbms_output.put_line('EROARE');
END;
/
3. Să se insereze în tabela FILIP_ANGAJATI un angajat nou, cu numele și prenumele Falcica Rares , însă fără a introduce id-ul. Să se
trateze eroarea apărută.
Declare
exceptie exception;
pragma exception_init(exceptie, -01400);
begin
insert into filip_angajati(id_angajat, nume, prenume) values (NULL, 'Falcica', 'Rares');
Exception
when exceptie then
dbms_output.put_line('Va rugam precizati id-ul angajatului!');
dbms_output.put_line('Mesajul erorii este: ' ||SQLERRM);
DBMS_OUTPUT.put_line('Codul erorii este:'||SQLCODE);
end;
/
4. Sa se creeze un bloc PL/SQL pentru actualizarea informatiilor legate de datele clientilor , unde codul clientului si telefonul sa fie introduse de
la tastatura. Considerati cazul in care codul clientului nu este valid.
set serveroutput on
declare
invalid_idc EXCEPTION;
begin
update filip_clienti
set telefon_client=&a
where id_client=&codc;
if sql%notfound then
raise invalid_idc;
end if;
exception
when invalid_idc then
dbms_output.put_line('Nu exista client cu acest cod');
when others then
dbms_output.put_line('A aparut eroarea:'||SQLERRM);
END;
/
5.Sa se dubleze pretul produselor strict cu utilizarea „Femei”. Daca se produc modificari, afisati numarul acestora,
altfel setati o exceptie.
declare
begin
update filip_produse set pret=pret*2 where id_produs in(select id_produs from filip_produse
where utilizare='Femei');
if sql%found
then dbms_output.put_line(sql%rowcount|| ' modificari');
else dbms_output.put_line('Fara modificari');
end if;
end;
/
6. Sa se construiasca un bloc prin care sa se afiseze pentru fiecare client id_ul, numele si prenumele concatenate, id-ul
comenzii plasate, data, statusul comenzii si modalitatea de plata .
declare
cursor x is select c.id_client, c.nume_client||' '||c.prenume_client as nume_complet, b.id_comanda, b.data,
b.stare_comanda, b.modalitate_plata
from filip_clienti c, filip_comenzi b where c.id_client=b.id_client;
z x%rowtype;
begin
open x;
loop
fetch x into z;
exit when x%notfound;
dbms_output.put_line(z.id_client||' '||z.nume_complet||' '||z.id_comanda|| ' '||z.data||' '|| z.stare_comanda||'
'||z.modalitate_plata);
end loop;
close x;
end;
/
7. Să se afișeze denumirea functiei și salariul angajaților care au salariul mai mic de 6000 folosind un cursor.
declare
cursor c is select denumire_functie, salariu from filip_functii where salariu<6000;
v_den filip_functii.denumire_functie%type;
v_sal filip_functii.salariu%type;
begin
open c;
loop
fetch c into v_den, v_sal;
exit when c%notfound;
dbms_output.put_line(' Functia '||v_den||' are salariul '||v_sal);
end loop;
close c;
end;
/
8. Sa se creeze tabela F_PRODUSE in care sa se insereze toate produsele din tabela FILIP_PRODUSE care au pretul
mai mare de 800.
execute dbms_output.put_line(ang_sal_med());
4. Creati o functie care sa verifice daca numarul de telefon al unui angajat este valid sau nu.(functie)
begin
if(verifica_telefon(1)) then
dbms_output.put_line('Angajatul are telefonul valid');
elsif(verifica_telefon(1) is null) then
dbms_output.put_line('Angajatul nu a fost gasit');
else
dbms_output.put_line('Angajatul are telefonul invalid');
end if;
end;
/
5.Creati o procedura care primeste ca parametru de intrare id-ul unei comenzi si returneaza prin parametru de tip out modalitatea de plata
prin care a fost achitata comanda.(procedura)