Vous êtes sur la page 1sur 28

Universit Technique de Moldova

Filire Francophone Informatique

Project d'anne
A la discipline: Bases de donnes et connaissances.

Thme: Gestion des ventes, des stocks et du personnel dun dpt des

matriels de construction"

Effectue par lt.


du groupe FI-101:

Grican Elena

Vrifi par
le professeur :

Viorel Rusu

Chiinu

2013

Sommaire

Introduction
Qu'est-ce qu'une base de donnes ?
Une base de donnes (son abrviation est BD, en anglais DB, database) est une entit dans
laquelle il est possible de stocker des donnes de faon structure et avec le moins de redondance
possible. Ces donnes doivent pouvoir tre utilises par des programmes, par des utilisateurs
diffrents. Ainsi, la notion de base de donnes est gnralement couple celle de rseau, afin de
pouvoir mettre en commun ces informations, d'o le nom de base. On parle gnralement de
systme d'information pour dsigner toute la structure regroupant les moyens mis en place pour
pouvoir partager des donnes.

Utilit d'une base de donnes ?


Une base de donnes permet de mettre des donnes la disposition d'utilisateurs pour une
consultation, une saisie ou bien une mise jour, tout en s'assurant des droits accords ces
derniers. Cela est d'autant plus utile que les donnes informatiques sont de plus en plus
nombreuses.
Une base de donnes peut tre locale, c'est--dire utilisable sur une machine par un utilisateur, ou
bien rpartie, c'est--dire que les informations sont stockes sur des machines distantes et
accessibles par rseau.
L'avantage majeur de l'utilisation de bases de donnes est la possibilit de pouvoir tre accdes
par plusieurs utilisateurs simultanment.

La gestion des bases de donnes


Afin de pouvoir contrler les donnes ainsi que les utilisateurs, le besoin d'un systme de gestion
s'est vite fait ressentir. La gestion de la base de donnes se fait grce un systme
appel SGBD (systme de gestion de bases de donnes) ou en anglais DBMS (Database
management system). Le SGBD est un ensemble de services (applications logicielles) permettant
de grer les bases de donnes, c'est--dire :

permettre l'accs aux donnes de faon simple

autoriser un accs aux informations de multiples utilisateurs

manipuler les donnes prsentes dans la base de donnes (insertion, suppression,


modification)

Le SGBD peut se dcomposer en trois sous-systmes :

le systme de gestion de fichiers :


il permet le stockage des informations sur un support physique

le SGBD interne :
il gre l'ordonnancement des informations

le SGBD externe :
il reprsente l'interface avec l'utilisateur

Tche du projet
La tche du projet est de construire une base de donnes relationnelle en utilisant le
systme de gestion de base de donnes Oracle. Le thme du projet est la gestion des ventes, des
stocks et du personnel dun dpt des matriels de construction. Dans la construction de la base
de donnes on doit implmenter les contraintes dintgrit tudies est premirement on doit
analyser le modle conceptuel et logique de la base. Puis on doit faire plusieurs requtes qui vont
montrer la fonctionnalit de la base cre. Finalement on va implmenter la base dans un
programme (optionel).

Le modle conceptuel , logique et relationnel de la base de donnes


Gestion des ventes, des stocks et du personnel dun dpt des

matriels de construction
Modle conceptuel des donnes
Le modle conceptuel des donnes (MCD) a pour but d'crire de faon formelle les donnes qui
seront utilises par le systme d'information. Il s'agit donc d'une reprsentation des donnes,
facilement comprhensible, permettant de dcrire le systme d'information l'aide d'entits.
Entits et classe d'entit
Une entit est la reprsentation d'un lment matriel ou immatriel ayant un rle dans le
systme que l'on dsire dcrire.
On appelle classe d'entit un ensemble compos d'entits de mme type, c'est--dire dont la
dfinition

est

la

mme.

Le

classement

des

entits

au

sein

d'une

classe

s'appelle classification (ou abstraction). Une entit est une instanciation de la classe. Chaque
entit est compose de proprits, donnes lmentaires permettant de la dcrire.
Relations et classes de relation
Une relation (appele aussi parfois association) reprsente les liens smantiques qui peuvent
exister entre plusieurs entits. Une classe de relation contient donc toutes les relations de mme
type (qui relient donc des entits appartenant des mmes classes d'entit). Une classe de
relation peut lier plus de deux classes d'entit.

Voici les dnominations des classes de relation selon le nombre d'intervenants :

une classe de relation rcursive (ou rflexive) relie la mme classe d'entit

une classe de relation binaire relie deux classes d'entit

une classe de relation ternaire relie trois classes d'entit

une classe de relation n-aire relie n classes d'entit

La cardinalit
Les cardinalits permettent de caractriser le lien qui existe entre une entit et la relation
laquelle elle est relie. La cardinalit d'une relation est compose d'un couple comportant une
borne maximale et une borne minimale, intervalle dans lequel la cardinalit d'une entit peut
prendre sa valeur :

la borne minimale (gnralement 0 ou 1) dcrit le nombre minimum de fois qu'une entit


peut participer une relation

la borne maximale (gnralement 1 ou n) dcrit le nombre maximum de fois qu'une entit


peut participer une relation

Le modle logique des donnes


Le modle logique des donnes consiste dcrire la structure de donnes utilise sans faire
rfrence un langage de programmation. Il s'agit donc de prciser le type de donnes utilises
lors des traitements.

Le modle relationnel
Le modle relationnel est bas sur une organisation des donnes sous forme de tables.
Modlisation relationnelle
La modlisation relationnelle permet de reprsenter les relations l'aide de tables ( deux
dimensions) dont chaque colonne a un identificateur qui reprsente un domaine. Une ligne du
tableau reprsente donc une entit et chacune des cases reprsente un de ses attributs.
On appelle attributs le nom des colonnes qui reprsentent les constituants de l'entit. Un attribut
(une colonne) est repr par un nom et un domaine de dfinition, c'est--dire l'ensemble des
valeurs qu'il peut prendre.
On appelle tuple (ou n-uplet) une ligne du tableau.

Ralisation de la base de donnes


Cration de tables de la base de donnes
1. Le table Tip_Operatiune
CREATE TABLE Tip_Operatiune(
ID_Operatiune NUMBER(4) PRIMARY KEY,
Denumire_Operatiune VARCHAR2(9)
)

2. Le table Unitate_Masura

CREATE TABLE Unitate_Masura(


ID_Unitate NUMBER(4) PRIMARY KEY,
Unitate VARCHAR2(10)
)

3. Le table Persoana
CREATE TABLE Persoana(
ID_Persoana NUMBER(4) PRIMARY KEY,
Nume VARCHAR2(10),
Prenume VARCHAR2(15),
Adresa VARCHAR2(30),
Telefon VARCHAR2(9),
Gen VARCHAR2(1),
Salariu NUMBER(6,2)
)

ALTER TABLE Persoana


ADD FK_Post_Ocupat NUMBER(4)
ALTER TABLE Persoana
ADD FOREIGN KEY (FK_Post_Ocupat)
REFERENCES Post_Ocupat(ID_Post)

4. Le table Depozit

CREATE TABLE Depozit(


ID_Depozit NUMBER(4) PRIMARY KEY,
Nume VARCHAR2(30),
Suprafata NUMBER(5,2),
Adresa VARCHAR(30),
Telefon VARCHAR(10))

5. Le table Atribuire
CREATE TABLE Atribuire(
ID_Atribuire NUMBER(4) PRIMARY KEY,
Data_Angajarii DATE,
Valuta VARCHAR2(4),
FK_Depozit NUMBER(4),
FK_Persoana NUMBER(4),
FOREIGN KEY(FK_Depozit) REFERENCES Depozit(ID_Depozit),
FOREIGN KEY(FK_Persoana) REFERENCES Persoana(ID_Persoana))

6. Le table Furnizor

CREATE TABLE Furnizor(


ID_Furnizor NUMBER(4) PRIMARY KEY,
Nume VARCHAR2(20),
Adresa VARCHAR2(30),
Telefon VARCHAR2(10)
)

7. Le table Categorie
CREATE TABLE Categorie
(
ID_Categorie NUMBER(4) PRIMARY KEY,
Categorie
VARCHAR2(30)
)

8. Le table Produs

CREATE TABLE Produs(


ID_Produs NUMBER(4) PRIMARY KEY,
Nume VARCHAR2(30),
Cod VARCHAR2(5),
Data_Producerii DATE,
Termen_Garantie NUMBER(2),
Data_Expirarii DATE,
FK_Furnizor NUMBER(4),
FOREIGN KEY(FK_Furnizor) REFERENCES Furnizor(ID_Furnizor)
)

9. Le table Caracteristici
CREATE TABLE Caracteristici(
ID_Caracteristici NUMBER(4) PRIMARY KEY,
Ambalare VARCHAR2(10),
Cantitate NUMBER(4),
Inaltime NUMBER(4),
Latime NUMBER(4),
Lungime NUMBER(4),
Culoare VARCHAR2(10),
Pret_Vanzare VARCHAR2(10),
Pret_Furnizare VARCHAR2(10),
FK_Produs NUMBER(4),
FK_Unitate NUMBER(4),
FOREIGN KEY(FK_Produs) REFERENCES Produs(ID_Produs),
FOREIGN KEY(FK_Unitate) REFERENCES Unitate_Masura(ID_Unitate)
)

10. Le table Post_Ocupat


CREATE TABLE POST_OCUPAT
(
ID_POST NUMBER(4) PRIMARY KEY,
POST
VARCHAR2(8 )
)

11. Le table Activitate


CREATE TABLE Activitate(
ID_Activitate number(4) PRIMARY KEY,
DataOperatiunii date,
Cantitate number(6,2),
FK_Produs number(4),
FOREIGN KEY(FK_Produs) REFERENCES Produs(ID_Produs),
FK_Depozit number(4),
FOREIGN KEY(FK_Depozit) REFERENCES Depozit(ID_Depozit),
FK_Persoana number(4),
FOREIGN KEY(FK_Persoana) REFERENCES Persoana(ID_Persoana),
FK_Operatiune number(4),
FOREIGN KEY(FK_Operatiune) REFERENCES Tip_Operatiune(ID_Operatiune),
FK_Unitate number(4),
FOREIGN KEY(FK_Unitate) REFERENCES Unitate_Masura(ID_Unitate)
ON DELETE CASCADE
)

Insertion des donnes dans les tables


1. Le table Tip_Operatiune
CREATE SEQUENCE operatiune_seq
START WITH 1
INCREMENT BY 1
NOMAXVALUE;
INSERT INTO Tip_Operatiune
INSERT INTO Tip_Operatiune
INSERT INTO Tip_Operatiune

VALUES (operatiune_seq.nextval, 'Vanzare');


VALUES (operatiune_seq.nextval, 'Furnizare');
VALUES (operatiune_seq.nextval, 'Lichidare');

Fig4. Les donnes de table Tip_Operatiune


2. Le table Unitate_Masura
CREATE SEQUENCE unitate_masura_seq
START WITH 1
INCREMENT BY 1
NOMAXVALUE;
INSERT INTO Unitate_Masura
INSERT INTO Unitate_Masura
INSERT INTO Unitate_Masura

VALUES (unitate_masura_seq.nextval, 'KG');


VALUES (unitate_masura_seq.nextval, 'Metri');
VALUES (unitate_masura_seq.nextval, 'Bucati');

Fig5. Les donnes de table Unitate_Masura


3.

Le table Persoana

CREATE SEQUENCE persoana_seq


START WITH 1
INCREMENT BY 1
NOMAXVALUE;
INSERT INTO persoana VALUES (persoana_seq.nextval, 'Gritcan', 'Elena',
'Chisinau, str.Studentilor 1', '078589874', 'F', 1);
INSERT INTO Persoana VALUES (persoana_seq.nextval, 'Gori', 'Victor',
'Onitcani, str.Florilor 4/2', '069321569', 'M', 1);
INSERT INTO Persoana VALUES (persoana_seq.nextval, 'Turcan', 'Alexandru',
'Chisinau, str.Alba Iulia 14', '079856425', 'M', 2);

Fig6. Les donnes de table Persoana


4. Le table Depozit

CREATE SEQUENCE depozit_seq


START WITH 1
INCREMENT BY 1
NOMAXVALUE;
INSERT INTO Depozit VALUES (depozit_seq.nextval, 'Depozit 1', 456.23,
'Chisinau str.Studentilor 1', '022458975' );
INSERT INTO Depozit VALUES (depozit_seq.nextval, 'Depozit 2', 2000,
'Chisinau str.Sciusev 1', '022589653')
INSERT INTO Depozit VALUES (depozit_seq.nextval, 'Depozit 3', 569.50,
'Chisinau str.Calea Orheiului ', '022496589')

Fig7. Les donnes de table Depozit


5. Le table Atribuire
CREATE SEQUENCE atribuiri_seq
START WITH 1
INCREMENT BY 1
NOMAXVALUE;
INSERT INTO Atribuire VALUES(atribuiri_seq.nextval,
12','dd/mm/yy'), 'lei', 2, 1)
INSERT INTO Atribuire VALUES(atribuiri_seq.nextval,
13','dd/mm/yy'), 'lei', 3, 1)
INSERT INTO Atribuire VALUES(atribuiri_seq.nextval,
12','dd/mm/yy'), 'lei', 4, 1)
INSERT INTO Atribuire VALUES(atribuiri_seq.nextval,
12','dd/mm/yy'), 'lei', 5, 2)
INSERT INTO Atribuire VALUES(atribuiri_seq.nextval,
13','dd/mm/yy'), 'lei', 6, 2)

to_date('20-08to_date('15-05to_date('25-09to_date('02-02to_date('10-05-

Fig8. Les donnes de table Atribuire


6. Le table Furnizor
DROP SEQUENCE furnizor_seq
CREATE SEQUENCE furnizor_seq
START WITH 1
INCREMENT BY 1
NOMAXVALUE;
INSERT INTO Furnizor VALUES (furnizor_seq.nextval, 'Lafarge', 'Chisinau,
strVarnita 14/2', '068 217770');
INSERT INTO Furnizor VALUES (furnizor_seq.nextval, 'Kema', 'Chisinau, str.
Uzinelor 15/1', '022 928858') ;
INSERT INTO Furnizor VALUES (furnizor_seq.nextval, 'Carpacement', 'Chisinau
str.Stefan cel Mare 2', '022 411236') ;

Fig9. Les donnes de table Furnizor


7. Le table Categorie
CREATE SEQUENCE categori_seq
START WITH 1
INCREMENT BY 1
NOMAXVALUE;
INSERT INTO Categorie
(categori_seq.nextval,
INSERT INTO Categorie
(categori_seq.NEXTVAL,
INSERT INTO Categorie
(categori_seq.NEXTVAL,

Fig10. Les donnes de table Categorie

VALUES
'Ciment si tencuiel' );
VALUES
'Lemn,Betonyp si OSB' );
VALUES
'Izolatii termice ');

8.

Le table Produs

CREATE SEQUENCE produs_seq


START WITH 1
INCREMENT BY 1
NOMAXVALUE;
INSERT INTO Produs VALUES (product_seq.nextval, 'CIMENT ALB KEMAFIN',
'123AS', to_date('01-10-12','dd/mm/yy'), 12, to_date('02-10-13','dd/mm/yy'),
1, 1);
INSERT INTO Produs VALUES (product_seq.nextval, 'VAR', '14kl3', to_date('0101-13','dd/mm/yy'), 12, to_date('02-01-14','dd/mm/yy'), 1, 2);
INSERT INTO Produs VALUES (product_seq.nextval, 'Cherestea',
'45lk8',to_date('10-01-13','dd/mm/yy'), 12, to_date('10-01-14','dd/mm/yy'),
2, 2);
INSERT INTO Produs VALUES (product_seq.nextval, 'OSB 3', 'w2d5t',
to_date('10-01-12','dd/mm/yy'), 24, to_date('02-01-15','dd/mm/yy'), 2, 3);

Fig11. Les donnes de table Produs


9.

Le table Caracteristici

CREATE SEQUENCE caracteristici_seq


START WITH 1
INCREMENT BY 1
NOMAXVALUE;
insert INTO caracteristici values(caracteristici_seq.nextval,
'', '', '', 45, 40, 1,1)
insert INTO caracteristici values(caracteristici_seq.nextval,
'', '','', 20,15, 2,1)
insert INTO caracteristici values(caracteristici_seq.nextval,
'','', '', '', 90, 85, 1, 1)
insert INTO caracteristici values(caracteristici_seq.nextval,
' 20 mm', ' 50cm', ' 6m', ' ', 80, 75, 3, 3)
insert INTO caracteristici values(caracteristici_seq.nextval,
' 20 mm', ' 1m', ' 8m', ' ', 120,110, 3,3)
insert INTO caracteristici values(caracteristici_seq.nextval,
6 mm', ' 1.25m', ' 2.5m', ' ', 180,175, 4,1)

'sac', 20, '',


'sac', 2, '',
'sac', 40,
'bucata',null,
'bucata', null,
'bucata', 12, '

Fig12. Les donnes de table Caracteristici


10.

Le table Post_Ocupat

CREATE SEQUENCE post_ocupat_seq


START WITH 1
INCREMENT BY 1
NOMAXVALUE;
INSERT INTO Post_Ocupat
INSERT INTO Post_Ocupat
INSERT INTO Post_Ocupat

VALUES (post_ocupat_seq.nextval, 'Contabil');


VALUES (post_ocupat_seq.nextval, 'Hamal');
VALUES (post_ocupat_seq.nextval, 'Vanzator');

Fig13. Les donnes de table Post_Ocupat


11. Le table Activitate
CREATE SEQUENCE activitate_seq
START WITH 1
INCREMENT BY 1
NOMAXVALUE;
INSERT INTO Activitate VALUES (activitate_seq.nextval,
13','dd/mm/yy'), 200,1,2, 3, 1,3);
INSERT INTO Activitate VALUES (activitate_seq.nextval,
13','dd/mm/yy'), 300, 2,3, 4, 1,3);
INSERT INTO Activitate VALUES (activitate_seq.nextval,
13','dd/mm/yy'), 500, 3,3, 4, 1,3);
INSERT INTO Activitate VALUES (activitate_seq.nextval,
13','dd/mm/yy'), 100, 3,3, '', 2,3);
INSERT INTO Activitate VALUES (activitate_seq.nextval,
13','dd/mm/yy'), 50, 4,4, 5, 1,3);

Fig14. Les donnes de table Activitate

to_date('01-05to_date('01-05to_date('01-05to_date('01-05to_date('02-05-

Le mises jour des donnes


1.

Le table Produs

UPDATE

2.

Produs SET Nume = 'Ciment Kemafin' WHERE ID_Produs = '1'

Le table Persoana

UPDATE

3.

Persoana SET Prenume = 'Selena' WHERE ID_Persoana = '1'

Le table Categorie

UPDATE

Categorie SET Categorie = 'Ciment, Tencuieli' WHERE ID_Categorie=1

Des slections des lignes avec diffrent conditions

Affichage des persons dans quel dpt travaille et qu'elle fonctionne occupe

SELECT Persoana.Nume,
Persoana.Prenume,
Depozit.nume AS "Nume Depozit",
Post_Ocupat.Post
FROM Persoana
INNER JOIN Atribuire
ON Persoana.ID_persoana = Atribuire.FK_Persoana
INNER JOIN Depozit
ON Atribuire.FK_Depozit= Depozit.ID_Depozit
INNER JOIN Post_Ocupat
ON PERSOANA.FK_Post_Ocupat = POST_OCUPAT.ID_POST
ORDER BY Persoana.Nume

Affichage de nombre de personne qui travaillent a un dpt spcifi

SELECT COUNT(*) AS "Nr angajati"


FROM Atribuire
INNER JOIN Persoana
ON Persoana.ID_PERSOANA = Atribuire.FK_PERSOANA
INNER JOIN Depozit
ON Atribuire.FK_DEPOZIT = Depozit.ID_DEPOZIT
WHERE Depozit.NUME = 'Depozit 2'

Affichage des produits a quelle catgorie appartient e quel est leur fournisseur

SELECT PRODUS.NUME AS "Nume Produs",


CATEGORIE.CATEGORIE,
FURNIZOR.NUME AS "Nume Furnizor"
FROM Produs
INNER JOIN Categorie
ON Produs.fk_categorie = Categorie.id_Categorie
INNER JOIN Furnizor
ON Produs.FK_Furnizor = Furnizor.ID_Furnizor
ORDER BY CATEGORIE.CATEGORIE

Affichage de nombre des produits qui sont fournisse d'un fournisseur spcifi, et la
catgorie de qui appartient

SELECT COUNT(*) AS "Nr Produse",


Categorie.Categorie,
Furnizor.Nume
FROM Produs
INNER JOIN Categorie
ON Produs.fk_categorie = Categorie.id_Categorie
INNER JOIN Furnizor
ON Produs.FK_Furnizor = Furnizor.ID_Furnizor
GROUP BY(Categorie.Categorie, Furnizor.Nume)
ORDER BY Categorie.Categorie

Affichage de nom de chaque produit et son caractristiques

SELECT Produs.Nume,
Caracteristici.Ambalare,
Caracteristici.Cantitate,
Caracteristici.Inaltime,
Caracteristici.Latime,
Caracteristici.Lungime,
Caracteristici.Pret_Vanzare,
Caracteristici.Pret_Furnizare,
Caracteristici.Culoare,
Unitate_Masura.Unitate
FROM Produs
INNER JOIN Caracteristici
ON Produs.ID_produs = Caracteristici.FK_produs
INNER JOIN Unitate_Masura
ON Unitate_Masura.ID_Unitate = Caracteristici.FK_Unitate
ORDER BY Produs.Nume

Affichage des ventes de tous les dpts

SELECT Activitate.Cantitate,
Activitate.Dataoperatiunii,
TIP_OPERATIUNE.DENUMIRE_Operatiune AS Operatiune,
Depozit.nume AS "Nume depozit",
Unitate_Masura.Unitate,
Produs.Nume AS "Nume produs"
FROM Activitate
INNER JOIN Tip_operatiune
ON Activitate.FK_Operatiune = TIP_OPERATIUNE.ID_OPERATIUNE
INNER JOIN Unitate_Masura
ON Activitate.FK_Unitate = Unitate_Masura.ID_Unitate
INNER JOIN Depozit
ON Activitate.FK_Depozit = Depozit.ID_Depozit
INNER JOIN Produs
ON Activitate.FK_Produs = Produs.ID_Produs
WHERE TIP_OPERATIUNE.DENUMIRE_Operatiune= 'Vanzare'
AND Activitate.Cantitate > 100

Affichage de nombre de produits du chaque dpt

SELECT COUNT(produs.id_produs) AS "Nr produse", Depozit.Nume AS "Nume


Depozit"
FROM Activitate
INNER JOIN Produs
ON Produs.ID_Produs = Activitate.FK_Produs
INNER JOIN Depozit
ON Activitate.FK_DEPOZIT = Depozit.ID_DEPOZIT
GROUP BY Depozit.Nume

La contrainte CHECK
ALTER TABLE Persoana
ADD CONSTRAINT Check_Persoana_Gen
CHECK (Gen IN ('M', 'F'));
INSERT INTO persoana VALUES (persoana_seq.nextval, 'Gritcan', 'Elena',
'Chisinau, str.Studentilor 1', '078589874', 'x',1500, 1);

Les vues

Affichage de dpt qui contient la plupart des produits

CREATE OR REPLACE VIEW max_produs AS SELECT COUNT(produs.id_produs) AS


Nr_produse, Depozit.Nume AS Depozit_nume
FROM Activitate
INNER JOIN Produs
ON Produs.ID_Produs = Activitate.FK_Produs
INNER JOIN Depozit
ON Activitate.FK_DEPOZIT = Depozit.ID_DEPOZIT
GROUP BY Depozit.Nume
SELECT MAX(nr_produse) AS "Nr produse",
MAX(Depozit_nume) AS "Nume Depozit "
FROM Max_produs

Affichage de date, et des fournisseurs qui a fourni produits dans les dpts.

CREATE OR REPLACE VIEW furnizare AS SELECT Depozit.Nume,


Depozit.Adresa,
Furnizor.Nume AS "Nume Furnizor",
Activitate.DataOperatiunii
FROM Activitate
INNER JOIN Depozit
ON Activitate.FK_Depozit = Depozit.ID_Depozit
INNER JOIN Produs
ON Activitate.FK_Produs = Produs.ID_Produs
INNER JOIN Furnizor
ON Produs.FK_Furnizor = Furnizor.ID_Furnizor
GROUP BY (Depozit.nume, Depozit.Adresa, Furnizor.Nume,
Activitate.DataOperatiunii)
SELECT * FROM Furnizare

Les unions et reunions

UNION le champ Cantitate de tables Activitate et Caracteristici

select Cantitate from activitate


1
2
5
9
10
10
10
20
20
20

ORDER BY

Cantitate ASC1

20
25
45
50
50
50
50
50
70
80

select Cantitate from Caracteristici ORDER BY


2
25
10
25
15
40
20
40
20
400
20
500
25
25

100
120
189
200
200
300
420
500
500
500
Cantitate ASC

SELECT

Cantitate FROM Caracteristici UNION


SELECT Cantitate FROM Activitate

1
2
5
9
10
15
20

25
40
45
50
70
80
100

120
189
200
300
400
420
500

UNION ALL le champ Cantitate de tables Activitate et Caracteristici

SELECT

Cantitate FROM Caracteristici UNION ALL


SELECT Cantitate FROM Activitate
ORDER BY Cantitate ASC
20
20
25
25
25
25
25
40
40
45
50
50
50
50
50
70

1
1
2
2
5
9
10
10
10
10
15
20
20
20
20
20

80
100
120
189
200
200
300
400
420
500
500
500
500

INTERSECT le champ Cantitate de tables Activitate et Caracteristici

SELECT

Cantitate FROM Caracteristici INTERSECT


SELECT Cantitate FROM Activitate
ORDER BY Cantitate ASC

2
10
20
25
500

SELECT

MINUS le champ Cantitate de tables Activitate et Caracteristici


Cantitate FROM Caracteristici MINUS
SELECT Cantitate FROM Activitate
ORDER BY Cantitate ASC

15
40
400

Les runions externes


SELECT Persoana.Nume, Persoana.Prenume, Depozit.Nume AS "Nume depozit"
FROM Persoana, Depozit, Atribuire
WHERE Persoana.ID_Persoana = Atribuire.FK_Persoana(+)
AND Atribuire.FK_Depozit = Depozit.ID_Depozit(+)

SELECT Produs.Nume, Categorie.Categorie


FROM Produs, Categorie
WHERE Categorie.ID_Categorie = Produs.FK_CAtegorie(+)

Procdures qui affiche le contenu de la table

Le table Persoana

CREATE OR REPLACE Procedure


persoana_show
is
v_ID
Persoana.id_persoana%TYPE;
v_nume
Persoana.nume%TYPE;
v_prenume
Persoana.prenume%TYPE;
v_adresa Persoana.adresa%TYPE;
v_telefon
Persoana.telefon%TYPE;
v_gen
Persoana.gen%TYPE;
v_salariu
Persoana.salariu%TYPE;
v_profesie Persoana.fk_post_ocupat
%TYPE;
cursor c_st is
select id_persoana,
Nume,
Prenume,
Adresa,
Telefon,
Gen,
Salariu,
FK_Post_Ocupat
from Persoana
order by Nume;
begin
open c_st;
loop
fetch c_st into v_ID,
v_nume,
v_prenume,
v_adresa,
v_telefon,
v_gen,
v_salariu,
v_profesie;
exit when c_st%notfound;
dbms_output.put_line('ID: '||v_ID);
dbms_output.put_line('Nume: '||
v_nume);
dbms_output.put_line('Prenume:
'||v_prenume);
dbms_output.put_line('Adresa:
'||v_adresa);
dbms_output.put_line('Telefon: '||
v_telefon);
dbms_output.put_line('Gen: '||
v_gen);
dbms_output.put_line('Salariu:
'||v_salariu);
dbms_output.put_line('Post
ocupat: '||v_profesie);
dbms_output.put(CHR(10));
end loop;
dbms_output.put_line('Total
angajati: '||c_st%rowcount);
close c_st;
dbms_output.put_line('DONE!');
exception
when others then
if c_st%isopen then

close c_st;
end if;
end;
/
exec

Persoana_show

Le table Categorie

CREATE OR REPLACE Procedure categorie_show


is
v_ID
Categorie.id_categorie%TYPE;
v_categorie
Categorie.categorie%TYPE;
cursor c_st is
select id_categorie,
Categorie
from Categorie
order by Categorie;
begin
open c_st;
loop
fetch c_st into v_ID,
v_categorie ;
exit when c_st%notfound;
dbms_output.put_line('ID: '||v_ID);
dbms_output.put_line('Categoria: '||v_categorie);
dbms_output.put(CHR(10));
end loop;
dbms_output.put_line('Total categorii: '||c_st%rowcount);
close c_st;
dbms_output.put_line('DONE!');
exception
when others then
if c_st%isopen then
close c_st;
end if;
end;
/

La supprimassions des donnes

Supprimer tous les personnes qui ne travaillent pas au dpts

SELECT * FROM Persoana

DELETE Persoana WHERE (ID_Persoana) NOT IN (SELECT FK_Persoana FROM


Atribuire)
SELECT * FROM Persoana

DELETE FROM Categorie WHERE ID_Categorie


SELECT * FROM Categorie

> 8

Des fonctions de groupe

SUM

CREATE OR REPLACE FUNCTION sum_suprafata RETURN NUMBER IS


suprafata number;
BEGIN
SELECT SUM(Suprafata)
INTO suprafata
FROM Depozit;
RETURN(Suprafata);
END sum_suprafata;

MIN

CREATE OR REPLACE FUNCTION min_vanzari RETURN NUMBER IS


cantitate number;
BEGIN
SELECT MIN(Cantitate)
INTO cantitate
FROM Activitate;
RETURN(cantitate);
END min_vanzari;

AVG

CREATE OR REPLACE FUNCTION avg_pret_vanzare RETURN NUMBER IS


pret number;
BEGIN
SELECT AVG(pret_vanzare)
INTO pret
FROM Caracteristici;
RETURN(pret);
END avg_pret_vanzare;

COUNT

CREATE OR REPLACE FUNCTION count_nr_produse RETURN NUMBER IS


nr number;
BEGIN
SELECT COUNT(id_produs)
INTO nr
FROM Produs;
RETURN(nr);
END count_nr_produse;

Procdures du insert et update


Le table categorie

create sequence seq_categorie


start with 10
increment by 1;
create or replace procedure in_or_up_categorie
(
id in Categorie.ID_Categorie%type,
cat in Categorie.Categorie%type)
is
iid Categorie.ID_Categorie%type;
begin
if id=0 then
begin
select seq_ categorie.nextval into iid from dual;
insert into Categorie values(iid, cat);
commit;
end;
else
begin
update Categorie
set categorie=cat
where id_categorie=id;
commit;
end;
end if;
end;
/

Insert

Update

Le table Furnizor

create sequence seq_furnizor


start with 15
increment by 1;
create or replace procedure in_or_up_furnizor
(
id in Furnizor.ID_Furnizor%type,
num in Furnizor.Nume%type,
adr in Furnizor.Adresa%type,
tel in Furnizor.Telefon%type
)
is
iid Furnizor.ID_Furnizor%type;
begin
if id=0 then
begin
select seq_furnizor.nextval into iid from dual;
insert into Furnizor values(iid, num, adr, tel);
commit;
end;
else
begin
update Furnizor
set nume=num,
adresa = adr,
telefon = tel
where id_furnizor=id;
commit;
end;
end if;
end;
/
EXECUTION AVEC OPTION INSERT:
exec in_or_up_furnizor(0, 'Furnizor 1', 'Adresa 1', 'Telefon 1');

Insert

Update