Sunteți pe pagina 1din 7

Ministerul Educaiei al Republicii Moldova

Universitatea de Stat din Moldova


Departamentul Informatica

Lucrere practica
La disciplina Baze de Date
Tema:Farmacie

A elaborat: Spnu Marcela,


gr.I21
A verificat: Climenco Elena

Chiinu, 2016
Despre Baza de Date Farmacie

Este necesar de a crea o baz de date conceput pentru a stoca director produse. Baza de date trebuie s
asigure stocarea de informaii privind produsele disponibile in aceasta, n baza i a bunurilor comerciale
stocate n aceste baze de date.

Am creeat o baza de date la temaFarmacie care contine 3 tabele: Produse,Producatori si


Oferte. Fiecare din tabele isi are cipurile si specificarile pe care le voi descrie mai jos mult mai
desfasurat.Scopul principal al acestei baze de date este introducerea, reinnoirea si utilizarea cu
usurina a informatiilor stocate in acesta fiind posibila utilizarea ei si exploatarea la maxim intr-
un timp forte scurt.

ER DIAGRAMA
Crearea si inserarea datelor in tablele:
CREATE TABLE PRODUSE (

Id_produs number(3) not null PRIMARY KEY,

Produs varchar2(50) not null,

Id_producator number(10) not null,

Pret number(20) not null,

Data_fabricarii date not null,

Data_expirarii date not null);

CREATE TABLE PRODUCATORI (


Id_producator number(3) not null PRIMARY KEY,
Producator varchar2(50) not null,
Tara_producere varchar2(50) not null,
Telefon number(20) not null,
Email varchar2(30) not null);

CREATE TABLE OFERTE (


Id_oferta number(3) not null PRIMARY KEY,
Id_produs number(10) not null,
Pret_initial number(10) not null,
Pret_redus number(10) not null);
PRODUSE PRODUCATORI OFERTE
INSERT INTO PRODUSE INSERT INTO PRODUCATORI INSERT INTO OFERTE
(Id_produs,Produs,Id_producator,Pre (Id_producator,Producator,Tara_prod (Id_oferta,Id_produs,Pret_initial,Pr
t,Data_fabricarii,Data_expirarii) ucere,Telefon,Email) VALUES et_redus) VALUES
VALUES (1,'Uzina chimico- (1,'1','99.66','92.12');
(1,'Stimuloton','3','45','10.02.2016','0 farmaceutica','Moldova','0163456789
1.11.2019'); ','uzin5acf@gmail.com'); INSERT INTO OFERTE
(Id_oferta,Id_produs,Pret_initial,Pr
INSERT INTO PRODUSE INSERT INTO PRODUCATORI et_redus) VALUES
(Id_produs,Produs,Id_producator,Pre (Id_producator,Producator,Tara_prod (2,'2','99.66','92.12');
t,Data_fabricarii,Data_expirarii) ucere,Telefon,Email) VALUES
VALUES (2,'Uzina chimico- INSERT INTO OFERTE
(2,'Pancreatin','3','45','02.02.2016','01 farmaceutica','Franta','0123756789','u (Id_oferta,Id_produs,Pret_initial,Pr
.11.2019'); zinacff@gmail.com'); et_redus) VALUES
(3,'5','99.66','92.12');
INSERT INTO PRODUSE INSERT INTO PRODUCATORI
(Id_produs,Produs,Id_producator,Pre (Id_producator,Producator,Tara_prod INSERT INTO OFERTE
t,Data_fabricarii,Data_expirarii) ucere,Telefon,Email) VALUES (Id_oferta,Id_produs,Pret_initial,Pr
VALUES (3,'Uzina chimico- et_redus) VALUES
(3,'Coldrex','3','15','10.02.2016','01.1 farmaceutica','Germania','012345678 (4,'5','99.66','92.12');
1.2019'); 9','uzina48cf@gmail.com');
INSERT INTO OFERTE
INSERT INTO PRODUSE INSERT INTO PRODUCATORI (Id_oferta,Id_produs,Pret_initial,Pr
(Id_produs,Produs,Id_producator,Pre (Id_producator,Producator,Tara_prod et_redus) VALUES
t,Data_fabricarii,Data_expirarii) ucere,Telefon,Email) VALUES (5,'5','99.66','92.12');
VALUES (4,'Uzina chimico-
(4,'Stimul','3','45','10.02.2016','01.11. farmaceutica','Turcia','0183456789','u INSERT INTO OFERTE
2019'); zin532acf@gmail.com'); (Id_oferta,Id_produs,Pret_initial,Pr
et_redus) VALUES
INSERT INTO PRODUSE INSERT INTO PRODUCATORI (6,'5','99.66','92.12');
(Id_produs,Produs,Id_producator,Pre (Id_producator,Producator,Tara_prod
t,Data_fabricarii,Data_expirarii) ucere,Telefon,Email) VALUES
VALUES (5,'Uzina chimico-
(5,'Stimuloton','3','45','10.02.2016','0 farmaceutica','Romania','0129456789
1.11.2019'); ','uzinacf123@gmail.com');

Crearea interogarilir utilizind aptitudinile accumulate pe parcursul acestui


semestru

Pentru crearea acestui set de interogari am creat un tabel clienti1 si amefectuat lucru
doar cu acesta.
CREATE TABLE PRODUCATORI (
Id_producator number(3) not null PRIMARY KEY,
Crearea tabelului Producator varchar2(50) not null,
Tara_producere varchar2(50) not null,
Telefon number(20) not null,
Email varchar2(30) not null);
INSERT INTO PRODUCATORI
Inserarea datelor in tabel (Id_producator,Producator,Tara_producere,Telefon,Email)
VALUES (1,'Uzina chimico-
farmaceutica','Moldova','0163456789','uzin5acf@gmail.com');
Stergerea datelor din tabel DELETE FROM PRODUCATORI1 where
Tara_producere='Germania';
Stergerea tabelului in drop table PRODUCATORI1;
intregime

Comenzi simple SQL: SELECTARE,MODIFICARE,AFISARE

Selectare produselor distinct din tabela produse select distinct produs from produse;
Selectarea tuturor producatorilor select *from producatori;
Selectati produsele la care pretul este 21 sau 111 Select * from produse where pret=21 or pret=111;
Selectati produsele la care pretul este mai mic de Select * from produse where pret<=45;
45
La intregistrarea 1 sa se modifice pretul in 22 si update produse set pret=22,
data_expirarii in 02.02.2019 data_expirarii='02.02.2019' where cod_produs=1;
Sa se afiseze toti producatorii la care cimpul select * from producatori where
Id_producator este diferit de 1 Id_PRODUCATOR!=1;
Sa se afiseze toate produsele care expira in anul select * from Produse where extract(year from
2017 data_expirarii)=2017;
Sa se afiseze toate produsele fabricate in luna select * from PRODUSE where extract(month
ianuarie from data_fabricarii)=01;
Afisati toti producatorii la care Tara_producere se select * from PRODUCATORI where
incepe cu litera T Tara_producere like 'T%';
Afisati toti producatorii la care in numarul de select * from PRODUCATORI where telefon
telefon in mijloc se contine cifra 7 like '%7%';
Sa se adauge cimpul Id_oferta cu valoarea 1 in alter table Produse add Id_oferta number default
tabelul PRODUSE '1' null;

Instructiuni de calculare

Sa se calculeze numarul de produse al Select count (*) from produse where


producatorului cu Id-ul 1 id_producator=1;
Sa se calculeze cite produse expira in anul 2017 Select count (*) from PRODUSE where
extract(year from data_expirarii)=2017;
Sa se calculeze cite produse au fost fabricate in Select count (*) from PRODUSE where
luna 11 extract(month from Data_fabricarii)=11;
Sa se calculeze suma tuturor produselor unde id- Select sum (pret) from produse where
ul producatorului este 1 id_producator=1;
Sa se calculeze suma tuturor produselor din tabela Select avg (pret) from produse;
produse
Sa se selecteze pretul maxim din tabela produse Select max (pret) from produse;
Sa se selecteze cel mai mare pret Select Produs,pret from produse where
Pret=(Select max (pret) from Produse);
Sa se selecteze cel mai mic pret Select denumire,pret,stare from produse where
Pret=(Select min (pret) from Produse);

Legatura intre tabele

Sa se afiseze numele si prenumele clientilor care SELECT Producator


au efectuat o comanda FROM PRODUCATORI
INNER JOIN PRODUSE
ON
producatori.Id_producator=produse.Id_producator;
Afisarea denumirii produsului si producatorul SELECT Producatori.producator, produse.produs
acestuia utilizind left join FROM PRODUCATORI
left JOIN PRODUSE
ON
producatori.Id_producator=produse.Id_producator;
Afisarea denumirii produsului si producatorul SELECT Producatori.producator, produse.produs
acestuia utilizind right join FROM PRODUCATORI
right JOIN PRODUSE
ON
producatori.Id_producator=produse.Id_producator;

PL/SQL

Sa se mareasca pretul tuturor produselor cu 3 begin


update produse set pret=pret+2.5;
IF SQL%FOUND THEN
DBMS_OUTPUT.PUT_LINE('Pretul a crescut
cu 2.5 lei');
ELSIF SQL%NOTFOUND THEN
DBMS_OUTPUT.PUT_LINE('Nu exista asa
tabel');
end if;
end;
DECLARE
Sa se calculeze pretul mediu al produselor si sa media int;
se afiseze inregistrarile cu pretul mai mic decit CURSOR c1 IS SELECT pret FROM produse
cel mediu utilizind CURSOARELE WHERE pret <(SELECT AVG(pret) FROM
produse);
BEGIN
SELECT AVG(pret) into media FROM produse;
DBMS_OUTPUT.PUT_LINE('Media preturilor
'||media||' lei');
FOR person IN c1
LOOP
DBMS_OUTPUT.PUT_LINE('Pretul mai mic decat
pretul mediu: '|| person.pret ||' lei');
END LOOP;
END;
Calcularea pretului unui produs(proceduri) CREATE OR REPLACE PROCEDURE new(x IN
number, y IN number, price OUT number,z OUT
number) IS
BEGIN
SELECT pret into price FROM produse WHERE
id_produs=x;
z:=y*price;
END;
DECLARE
a produse.id_produs%type;
b number;
c produse.pret%type;
d number;
e produse.produs%type;
BEGIN
a:= 1;
b:= 5;
SELECT produs into e FROM produse WHERE
id_produs=a;
new(a, b, c,d);
dbms_output.put_line(b||' unitati de '||e||' cu pretul
'||c||' lei, costa '||d||' lei');
END;
Calcularea numarului de producatori utilizind CREATE OR REPLACE FUNCTION function1
functiile RETURN number IS
total number(10) := 0;
BEGIN
SELECT count(*) into total FROM producatori;
RETURN total;
END;
DECLARE
c number(10);
BEGIN
c := function1();
dbms_output.put_line('Numarul total de
producatori este de ' || c);
END;
Trigger-ul ne va afce update pentru coloana CREATE OR REPLACE TRIGGER trig
producatorilor si va adauga abreviatura SRL BEFORE insert or UPDATE ON producatori
FOR EACH ROW
BEGIN
:new.producator:=CONCAT(:new.producator,'SRL');
END;
Se efectueaza cautarea si afisarea DECLARE
producatorului cu codul declarat in sectiunea cod producatori.Id_producator%type := 2;
de program. In cazul in care in BD exista asa c_nume producatori.producator%type;
perosana compilatorul va afisa numele si c_tara producatori.tara_producere%type;
prenumele acestuia in cazul lipsei acestuia BEGIN
compilatorul afiseaza un mesaj. SELECT producator, tara_producere INTO
c_nume, c_tara
FROM producatori WHERE Id_producator = cod;

DBMS_OUTPUT.PUT_LINE ('Nume: '||


c_nume);
DBMS_OUTPUT.PUT_LINE ('Tara: ' || c_tara);
EXCEPTION
WHEN no_data_found THEN
dbms_output.put_line('Nu mai sunt
producatori!');
WHEN others THEN
dbms_output.put_line('Error!');END;
Sa se creeze un tael virtual in care nis e afisa create or replace view produse_view
produsul cu pretul minim as (select * from produse where pret=(select
min(pret) from produse));

select * from produse_view;

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