CH 03 Oracle
CH 03 Oracle
2O23-2024
Sommaire
Introduction
Création de TAD
Les pointeurs
Table imbriquée
Tableau de taille
prédimenssionée
Interrogation
Les méthodes
Héritage
Vues et triggers
Bibliographie
1
Sommaire
Objectifs :
Comprendre les concepts de base
des BD objets dans Oracle
Savoir créer une BD Objet
relationnel avec Oracle
Savoir utiliser une BD Objet
relationnel avec Oracle
I. Introduction
1.1. Historique des SGBD Séparation de la description des
données des programmes
SGBD hiérarchique (1960) d’application
Proche des systèmes de gestion Langages d’accès navigationnels
de fichiers. (déplacement dans des structures
Les données sont classées de type graphe pour accéder à
hiérarchiquement. une information).
Modèle le plus anciens Impossible d’interroger une BD
Particulièrement adapté aux sans savoir où était l'information
organisations à structure recherchée (on "naviguait") et
arborescente. sans écrire de programmes.
Il présente toutefois des risques
d'anomalies lors d'opérations de
stockage, en raison de sa
structure relativement rigide :
la suppression d'un « nœud »
engendre la suppression des
données descendantes.
INP-HB/K. M. BROU BD avancées : BD objets 4
2
I. Introduction
Exemple :
278
BROU
Enseignant Konan
Yakro
Cours
UV21 UV12
Algo BD
Etudiant 3 4
1 2
TOTO FROTO
Ali Mankou
Yakro Abidjan
I. Introduction
SGBD réseau (1960) Exemple :
CODASYL (Conference on Data
Systems Languages)
Etudiant Enseignant
Conférence sur les langages de
systèmes de traitement de
données.
Cours
À la différence du modèle
hiérarchique, la structure n'est
pas forcément en arborescence
dans le sens descendant, rendant
possible la relation plusieurs à
plusieurs.
3
I. Introduction
SGBD relationnel ou SQL (1970) Langages assertionnels basés sur
Basé sur la théorie des
la logique des prédicats
permettant de manipuler les
relations. données sans dire comment les
Organise les données sous forme accéder (par opposition aux
de tables. langage navigationnel).
Modèle le plus utilisé aujourd’hui
Relativement facile à gérer et
mettre en œuvre
Assure une faible redondance et
une cohérence élevée des
données.
Enrichir le SGBD externe afin de
faciliter l’accès aux données
I. Introduction
Exemple :
Etudiant Professeur
numEt nomEt adresseEt numPr nomPr adressePr
1 TOTO Yakro 1 BROU Yakro
2 FROTO Abidjan 2 GOORE Abidjan
3 Mankou Yakro
Suit Cours
numEt NumCo note numCo libellé numPr
1 UV1 15 UV1 BD 1
1 UV2 12 UV2 Réseau
4
I. Introduction
SGBD orienté objet (1986) Objet informatique :
Issu des langages de
Interface
programmation orientés objet. Méthode Classe/Objet
Méthode
Un objet regroupe en une seule
Méthode
entité les données et les fonctions Données
de traitement de ces données. Méthode
Méthode
Bénéficie à la fois de la puissance
de modélisation des modèles
objets et de stockage d'un SGBD BDOO : hiérarchie de tables OR
pour gérer des structures de reliées par des pointeurs.
données complexes.
I. Introduction
Exemple 1 : attribut structuré Exemple 2 : attribut de type REF
Etudiant
Commande Client
numEt bac adresse numCom dateCom @estPassee numCl nom
norue rue ville codePostal 1 13/12/06 5 Toto
2 2/12/06 NULL 2 Fatou
3 2/12/06 4 Mankou
10
5
I. Introduction
SGBD orienté document Exemple :
11
I. Introduction
1.2. Limites des BD Normalisation
relationnelles Accroissement du nombre de
relations
Naissance en 1970
Problème de performance s’il y a
Simplicité du modèle de données beaucoup de relations
Structures de données tabulaires problème des jointures
à deux dimensions (relation)
Opérations séparées des données
Langage déclaratif SQL (non
procédural) Procédures stockées non
Interfaçage avec un langage de intégrées dans le modèle
programmation procédural Mauvais support des applications
Dialogue indirect entre la BD et le non standards
langage
CAO, FAO, BD Géographiques, BD
Gestion des données complexes techniques
structurées
Introduction du type BLOB
(Binary Large OBjects).
12
6
I. Introduction
1.3. Pourquoi les BD Objet- Police
relationnels Conducteurs
1, n concerne 1, n police
nom nom
Nécessité de conserver la age adresse
compatibilité avec l'existant
1, n
SGBD relationnel Accidents
1, 1
Applications client-serveur code subit
rapport
Nécessité de supporter des photo
données complexes
Textuelles, géométriques, En relationnel : 4 tables
géographiques, audiovisuelles, Conducteur(nom, age)
soniques, multimédias Police(police, nom, adresse)
Exemple : modélisation d’une Concerne(#nom, #police)
police d’assurance Accident(code, rapport, photo,
#police)
13
I. Introduction
En objet-relationnel : 1 seule
table
219
037
25 Papis Daloa
14
7
I. Introduction
Approche d’évolution des SGBD
Mapping Objet-SGBD Relationnels
Construire une nouvelle
technologie de BD : SGBDOO
SGBD Orienté Objet
Langage de Programmation
Orienté Objet persistant
SGBD Objet-Relationnel (SGBD-
OR)
Modèle Relationnel + extension
orientées objet
15
I. Introduction
1.4. Mapping Objet-SGBD Couche d'accès aux données
Couche plus basse d'une
Relationnels architecture applicative
ORM : Object Relational Mapping Permet d'interfacer le code métier
But : établir une correspondance avec une source de données.
entre : Intérêt : pouvoir changer de BD
une table de la BDR ; en n'ayant besoin de ne modifier
et une classe du modèle objet. que la couche d'accès.
Persistance
Paradigme relationnel Paradigme objet Un objet (instance d'une classe)
SGBDR
Wrapper Client est persistant si l'état des
BDR objet attributs de cet objet est conservé
dans les lignes de table d'une
Wrapper client Orienté Objet BD.
(Wrapping Objet) Un objet Java est persistant,
c'est-à-dire a sa place dans une
Langage de Programmation table d'une BD, s'il est instance
Orienté Objet + SGBDR d'une classe Java mappée.
INP-HB/K. M. BROU BD avancées : BD objets 16
16
8
I. Introduction
Mapping On stocke l'état d'un objet dans
Le mapping d'une classe permet, une BD.
entre autres, de savoir comment Exemple : classe Client
la table correspondante devra possède 3 attributs numCl, nom et
être implantée dans le SGBD adresse
associé. on associe cette classe à une table
Opérations CRUD : qui possède 3 colonnes : numCl,
nom et adresse.
Create (INSERT) ;
Read (SELECT) ;
Client
Update (UPDATE) ; numCl API de BD
Delete (DELETE). Nom (JDBC, SQLJ)
adresse
Table Client
17
I. Introduction
Classe Client
numCl:Integer
Nom:String
Adresse;String
Instance
numCl:1 numCl nom adresse
Nom:Toto 1 Toto Yakro
Adresse;Yakro 2 Froto Yakro
3 Mankou Abidjan
Table Client
BD relationnelle
18
9
I. Introduction
Forces : Framework ORM Java
Utilisation de systèmes existants Hibernate
Développement rapide Enterprise JavaBeans Entity
d'application OO exploitant les Beans
données (business objects)
Faiblesses : Java Data Objects
Cohabitation de deux paradigmes: Castor
Serveur de BDR (Schéma TopLink
Relationnel) Spring DAO
Client : C++ ou Java (Schéma
objet)
Cf cours Hibernate
Pas d'intégration au SGBDR
Pas de maintien de l'intégrité
Procédures stockées
Solution limitée
Vendeurs : Ardent, Persistence
Software, Ontologic, …
INP-HB/K. M. BROU BD avancées : BD objets 19
19
I. Introduction
1.5. SGBD Orienté Objets Objectifs des SGBDOO :
SGBDOO Offrir aux langages de
programmation orientés objets le
Créés pour gérer des structures stockage permanent et le partage
de données complexes (SDC) : entre plusieurs utilisateurs.
SGBDOO = LOO + BD Offrir aux BD des types des SDC et
extensibles.
Permettre la représentation de
structures complexes et/ou à
taille variable.
20
10
I. Introduction
Avantages des SGBDO : L'identification des objets permet
Le schéma d'une BD objet est plus de supprimer les clés artificielles
facile à comprendre que celui souvent introduites pour atteindre
d'une BD relationnelle : la 3FN.
Il contient plus de sémantique ; Donc la simplification du schéma.
Il est plus proche des entités L'encapsulation et l'abstraction du
réelles. modèle objet permette de mieux
séparer les BD de leurs
L'héritage permet de mieux
applications.
structurer le schéma et de
factoriser les propriétés Notion d'interface.
communes. Normalisé : ODMG
La création de ses propres Types Groupe de normalisation des
de Données Abstraits (TAD) SGBDOO.
permet une représentation plus
directe du domaine.
21
I. Introduction
Inconvénients des SGBDOO : Gestion de la concurrence
(transactions) plus difficile à
Inertie de l’existant : très mettre en œuvre.
nombreuses BD relationnelles Interdépendance forte des objets
utilisées ; entre eux.
Pas de normalisation des SGBDO ; Gestion des pannes.
Complexité des systèmes
Moins de souplesse pour s’adapter (problème de fiabilité).
à plusieurs applications ; Problème de compatibilité avec
Peu d’informaticiens formés aux les SGBDR classiques.
SGBDOO.
Gestion de la persistance et de la
coexistence des objets :
en MC pour leur manipulation
applicative
et sur disque pour leur
persistance
22
11
I. Introduction
Remarques :
Les SGBDO apporte des concepts
fondamentaux pour l'évolution
des BD
mais leur réalité est encore en
grande partie du domaine de la
recherche.
Ils apportent donc une innovation
sur des aspects que les SGBDR ne
savent pas faire
mais sans être au même niveau
sur ce que les SGBDR savent bien
faire.
Liens pour SGBDO ou SGBDOR
http://www.service-
architecture.com/products/object
-oriented_databases.html
23
I. Introduction
1.6. SGBD Objet-Relationnel Objectifs des SGBDOR :
SGBDOR Gérer des données complexes
Ou SGBD Relationnel-Objet (temps, géo-référencement,
(SGBDRO) multimédia, types utilisateurs,
etc.) ;
Nés du double constat :
Rapprocher le modèle logique du
Avantages des SGBDOO
modèle conceptuel
Insuffisances des SGBDOO pour
répondre aux exigences de Exemples de SGBDOR :
l'industrie des BD classiques. Oracle, PostgreSQL, Informix,
Introduire dans les SGBDR les Sybase, DB2
concepts des SGBDOO
Plutôt que de concevoir de
nouveaux SGBD.
24
12
I. Introduction
Propriétés TIPS et RICE Propriétés TIPS (Miranda)
Langage de
T : Transaction
Modèle
relationnel programmation I : Intégrité
de Codd objet P : Persistance
Propriétés
S : Structuration
Propriétés
TIPS RICE
Modèle OR
(Objet-
Relationnel)
Propriétés
TIPS+RICE
25
I. Introduction
Propriétés RICE (Miranda) Encapsulation : boîte noire avec
Réutilisation : finalité du des méthodes de manipulation
paradigme objet (héritage, FUNCTION et PROCEDURE
généralité, composition, associées au TAD
polymorphisme) Niveau d’encapsulation : public,
Héritage Multiple (clause UNDER) protected, private
Polymorphisme (surcharge) et
Template (généricité) Objet
Identité : identifier un objet de Polymorphisme
manière unique
Relationnel
ROW ID
Complexité : définition de objets Types Domaine
complexes et/ou fortement utilisateurs Table Collection
structurés Attribut
Clé
ADT Abstract Data Type (Object Référence
ADT et Value ADT) Méthode Identifiant
Collections : SET, LIST, MULTISET
Opérateurs : VALUE, REF et Héritage
DEREF
26
13
I. Introduction
Quelques vendeurs de SGBDOR
Actian Corporation (Versant
Object Database, FastObjects, and
db4o)
db4objects, Inc. (db4o - database
for objects - open source) -
acquired by Versant Corporation
and subsequent acquired by
Actian Corporation
NeoDatis (NeoDatis ODB)
ObjectDB Software (ObjectDB for
Java/JDO)
Objectivity, Inc. (Objectivity/DB)
Oracle Corporation (Oracle
Berkeley DB)
Orient Technologies (OrientDB)
The Ozone Database Project
(ozone - open source)
Versata (ObjectStore)
27
I. Introduction
1.7. SQL3 (ou SQL99) Collections :
Etend SQL2 avec des Tables imbriquées : collection non
ordonnée et non limitée
fonctionnalités objets et autres : d’éléments de même type
De nouveaux types de données : (NESTED TABLE).
Large Object (CLOB et BLOB), Tableaux de taille
Boolean, Array, Row prédimensionnée : collection
De TAD ordonnée et limitée d’éléments de
Type de données créé par le même type (VARRAY).
concepteur d'un schéma OR
Encapsule les données et les
opérations sur ces données.
Concept identique à celui de
classe d'objets
Identification des objets et
références
OID : pour chaque tuple d’une
table OR (REF et DEREF)
28
14
I. Introduction
1.8. Evolution de SQL SQL:2011
SQL:2003 a ajouté les données temporelles
et quelques améliorations aux
Introduit des fonctions liées à fonctions de fenêtre et à la clause
XML pour permettre FETCH.
l'interopérabilité entre les BD et
les technologies XML. SQL:2016
SQL:2006 A ajouté la correspondance des
motifs de ligne et les fonctions de
Précise davantage la manière table polymorphes, ainsi que le
d'utiliser SQL avec XML. support JSON.
Pas une révision de l'ensemble de Dans les années 2010, JSON a
la norme SQL, mais uniquement remplacé XML comme format
de la partie qui traite de commun d'échange de données ;
l'interopérabilité SQL-XML.
Les applications Internet
SQL:2008 modernes utilisent JSON au lieu
a légalisé l'utilisation de ORDER de XML comme format de
BY en dehors des définitions de données.
curseur.
A ajouté les déclencheurs
INSTEAD OF, l'instruction
TRUNCATE et la clause FETCH.
INP-HB/K. M. BROU BD avancées : BD objets 29
29
I. Introduction
Le mouvement NoSQL émergent a
également popularisé JSON ;
les BD documentaires stockent
des fichiers JSON, et les magasins
de valeurs clés sont compatibles
avec le format JSON.
La norme SQL a ajouté la prise en
charge de JSON pour permettre
l'interopérabilité avec les
applications modernes et les
nouveaux types de BD.
SQL:2019.
Norme SQL actuelle
A ajouté la partie qui définit la
prise en charge des tableaux
multidimensionnels dans SQL.
30
15
I. Introduction
Exercice 1 : c) La représentation de données
Quelles assertions expriment des complexes conduit à une
fragmentation de l'information
limites des SGBDR qui justifient
en de multiples relations et à des
le modèle relationnel-objet ? chutes de performance.
a) Le principe d'atomicité des d) Le modèle relationnel ne permet
attributs d'une relation (1FN) pas d'exécuter correctement des
empêche de disposer de transactions en réseau.
propriétés structurant plusieurs
e) Il n'est pas possible de créer des
valeurs dans un type complexe.
types de données
b) La séparation des données et des personnalisées.
traitements empêche
f) Il est impossible d'exécuter des
l'intégration des méthodes au
instructions SQL2 à partir d'un
modèle.
langage objet tel que Java, alors
que c'est possible avec SQL3.
g) L'héritage n'est pas
représentable directement.
INP-HB/K. M. BROU BD avancées : BD objets 31
31
I. Introduction
Exercice 2 :
Quelles fonctionnalités peuvent
être réalisées en relationnel-
objet mais pas en relationnel.
a) Associer des méthodes aux
tables
b) Mettre plusieurs valeurs dans un
enregistrement
c) Référencer un enregistrement
depuis un autre enregistrement
d) Définir ses propres types de
données
32
16
I. Introduction
Exercice 3 : Notons que le modèle relationnel
permet une imbrication à
Des services employant des plusieurs niveaux, par exemple,
employés et enregistrant des Motif pourrait correspondre à une
dépenses pourront directement table pour chaque dépense.
être représentés par une seule Question :
table externe imbriquant des Modéliser ce service en donnant
tables internes : une extension de la table Service.
SERVICES (N° INT, CHEF On s’inspirera de la modélisation
VARCHAR, ADRESSE VARCHAR, d’une police d’assurance (slide
{EMPLOYÉS (NOM, AGE)}, 12).
{DÉPENSES (NDEP INT, MONTANT
INT, MOTIF VARCHAR)})
Employés correspond à une table
imbriquée (ensemble de tuples)
de schéma (Nom, Age) pour
chaque service, et de même,
Dépenses correspond à une table
imbriquée pour chaque service.
33
34
17
II. Création de TAD
Création des tables
2.2. Création de TAD et de
35
avec :
typei : types standard ou TAD.
Un type ne contient pas de
contraintes.
OR REPLACE : recrée un type
sans qu’il soit nécessaire de le
détruire au paravent.
Il est impossible de stocker des
objets dans un TAD, il faut
nécessairement déclarer une table
OR rattachée à ce type.
36
18
II. Création de TAD
Ajout d’un attribut dans un TAD Suppression d’une méthode
Syntaxe : ALTER TYPE nomDuTAD
DROP MEMBER FUNCTION|PROCEDURE
ALTER TYPE nomDuTAD
nomDeMthode[(arguments)]
ADD ATTRIBUTE nomDeAttribut typeDeAttribut
[RETURN typeDeRetour] cascade;
cascade;
37
Adresse
norue rue ville codePostal
adresseType.sql
Création du TAD
CREATE TYPE adresseType AS OBJECT
(norue NUMBER,
rue VARCHAR2(30),
ville VARCHAR2(20),
codePostal VARCHAR2(10)
)
/
INP-HB/K. M. BROU BD avancées : SGBD Oracle OR 38
38
19
II. Création de TAD
Structure d’un TAD ou d’une Insertion
table OR adresseInsert.sql
Commande DESC Commentaire
INSERT INTO adresse SQL2
SQL> DESC AdresseType
SQL> DESC Adresse VALUES(12,’rue 12’, ‘Abidjan’, 1234);
INSERT INTO adresse VALUES SQL3, utilisation du
(adresseType(21,’rue du commerce’, constructeur du type
‘Abidjan’, 1234));
Interrogation
SQL> SELECT * FROM Adresse;
39
Suppression
adresseSuppr.sql
Requête : suppression Commentaire
DELETE FROM Adresse WHERE norue=12; SQL2
40
20
II. Création de TAD
clientType.sql
2.4. TAD utilisé par un autre
41
42
21
II. Création de TAD
Modification Suppression
clientModif.sql clientSuppr.sql
En SQL3 SQL3
UPDATE Client e DELETE
SET e.nom='Toto Ali’ FROM Client e
WHERE e.numCl=5; WHERE e.numCl=5;
DELETE
SQL3, on utilise l'attribut adr du FROM Client e
type adresseType
WHERE e.adr.norue=7;
UPDATE Client e
SET e.adr.rue='Rue 12 barree’
WHERE e.adr.norue=21;
43
44
22
II. Création de TAD
2.6. Visualiser les erreurs
Méthode 1 :
SQL> show errors
Méthode 2 :
SQL> select *
from user_errors;
45
Exemple :
SQL> DROP TYPE clientType;
46
23
II. Création de TAD
2.8. TAD type d’un attribut
d’une table relationnel
employeType.sql
Création de la table
CREATE TABLE Employe
(numE NUMBER, nom VARCHAR2(15), adr adresseType)
/
47
48
24
II. Création de TAD
Modification du TAD
2.9. Ajout d’un attribut à un
49
50
25
II. Création de TAD
Exemple : Création des TAD (heritage.sql)
Graphe d’héritage CREATE OR REPLACE TYPE adresseType AS OBJECT
(norue NUMBER,
Personne numP nom adresse rue VARCHAR2(30),
ville VARCHAR2(20),
codePostal VARCHAR2(10)
Client numP nom adresse compte )
/
51
52
26
II. Création de TAD
Insertion Interrogation
53
54
27
II. Création de TAD
Exemple
CREATE TYPE serviceType AS OBJECT
Substitution du type (nomS VARCHAR(10),
personneType avec le type responsable personneType
);
clientType
CREATE TABLE service of serviceType
(CONSTRAINT servive_nomS_PK PRIMARY KEY (nomS));
55
56
28
II. Création de TAD
Modification de la directive FINAL
Syntaxe :
ALTER TYPE nomDuType FINAL | NOT
FINAL CASCADE;
Modification de la directive
INSTANCIBLE
Syntaxe :
57
58
29
III. Les références
3.2. Référence simple Création du TAD
Exemple : CREATE OR REPLACE TYPE commandeType AS OBJECT
Une commande est passée par un (numCom NUMBER,
seul client. dateCom DATE,
Chaque commande pointe vers son estPassee REF clientType
client. )
refSimple.sql /
Création de la table
Commande Client
1..* 1 CREATE TABLE commande OF commandeType
numCl
numCom (CONSTRAINT commande_numCom_PK
nom
dateCom estPassee PRIMARY KEY (numCom));
adr
Structure de la table
Commande Client
estPassee numCl
numCom nom
dateCom adr
59
60
30
III. Les références
Interrogation Toutes les commandes
SQL> SELECT * FROM Commande;
SELECT co.estPassee.numCl,
numCom dateCom @estPassee co.estPassee.nom, numCom, dateCom
1 2/12/06 0000220208A7F7FC5C97014F09AB8 FROM Commande co;
B75C861A5BFE923D0E7DD00CA433
A918F6BB13CAFE5F2
61
62
31
III. Les références
Modification
refSimpleModif.sql
Affectation de pointeur
Affecter le client de numéro 2 à la
commande de numéro 3
UPDATE Commande co
SET co.estPassee =
(SELECT REF(cl) FROM Client cl WHERE cl.numCl=2)
WHERE co.numCom=3;
63
UPDATE Commande co
SET co.estPassee =
(SELECT REF(cl) FROM Client cl WHERE cl.numCl=5)
WHERE co.numCom=3;
64
32
III. Les références
Suppression
refSimpleSuppr.sql
65
5 Toto
2 Fatou
4 Mankou
Commande
numCom dateCom @estPassee
1 2/12/06
2 2/12/06 NULL
3 2/12/06
INP-HB/K. M. BROU BD avancées : SGBD Oracle OR 66
66
33
III. Les références
Le client 5 passe la commande 3
SELECT numCl, nom, cl.passe.numCom,
UPDATE Client cl
cl.passe.dateCom
SET cl.passe =
FROM Client cl
(SELECT REF(co)
/
FROM Commande co
WHERE co.numCom=3
)
WHERE cl.numCl=5;
67
68
34
III. Les références
3.5. Clause SCOPE IS Création du TAD
Limite la portée d’un attribut de CREATE OR REPLACE TYPE commandeType AS
type REF OBJECT
(numCom NUMBER,
Un TAD permet de créer plusieurs
tables ayant la même structure. dateCom DATE,
"SCOPE IS" limite la portée d’un estPassee REF clientType
attribut de type REF à une table )
particulière parmi toutes les /
tables issues du TAD :
permet d’améliorer l’intégrité Création de la table
référentielle, nécessite moins CREATE TABLE commande OF commandeType
d’espace de stockage et améliore (CONSTRAINT commande_numCom_PK
les accès. PRIMARY KEY (numCom), estPassee SCOPE
Exemple : IS Client);
refSCOPE.sql
Remarque :
Les objets de la table Commande SCOPE IS Client indique que
sont relies aux objets de la table estPassee référencera une ligne de la
Client. table Client
et pas une ligne d’une autre table créée
à partir du type clientType
INP-HB/K. M. BROU BD avancées : SGBD Oracle OR 69
69
70
35
III. Les références
3.7. Clause WITH ROWID CREATE TABLE Client OF clientType
Concerne un attribut de type REF (CONSTRAINT client_numCl_PK PRIMARY KEY (numCl))
Stocke le ROWID avec l’OID dans OIDINDEX OIDClient;
l’attribut de type REF.
Permet d’améliorer les CREATE TABLE commande OF commandeType
performances de (CONSTRAINT commande_numCom_PK PRIMARY KEY
déréférencement, mais utilise (numCom), estPassee WITH ROWID SCOPE IS
davantage d’espace mémoire. Client);
refROWID.sql
Création des tables
71
72
36
IV. Tables imbriquées
4.1. Présentation
Table imbriquée ou NESTED
TABLE
Collection non ordonnée et non
limitée d’éléments de même
type.
Contredit la 1FN
73
Departement Employe
noDept noEmp
budget employes nom
age
74
37
IV. Tables imbriquées
NESTEDTABLE0R.sql Création de la table
Création du TAD
CREATE TABLE Departement OF deptType
CREATE OR REPLACE TYPE empType AS OBJECT (CONSTRAINT Dept_PK PRIMARY KEY (noDept))
(noEmp NUMBER, NESTED TABLE employes STORE AS tabEmp;
nom VARCHAR2(30),
age NUMBER
) La clause NESTED TABLE sert à
/ définir une table imbriquée
CREATE OR REPLACE TYPE empsType AS TABLE La clause STORE AS permet de
OF empType nommer la structure interne qui
/ stocke les enregistrements de la
CREATE OR REPLACE TYPE DeptType AS OBJECT table imbriquée.
(noDept VARCHAR2(13),
budget NUMBER,
employes empsType
)
/
75
76
38
IV. Tables imbriquées
Sélection SELECT d.noDept,d.budget,e.noEmp,e. nom, e.age
SELECT * FROM Departement d, TABLE(d.employes) e;
FROM Departement ;
77
78
39
IV. Tables imbriquées
Interrogation Sélectionner toutes les lignes
Sélectionner uniquement les lignes
de la table imbrique SELECT d.noDept, d.budget, e.noEmp, e.nom
On utilise le mot clé THE qui FROM Departement d, TABLE(d.employes) e;
désigne la table imbriquée
79
80
40
IV. Tables imbriquées
Exemple 2 : Critère porte sur la Visualisation
NESTED TABLE
Augmenter de 10% les SELECT d.noDept, d.budget, e.noEmp, e.nom
départements qui ont au moins un FROM Departement d, TABLE(d.employes) e;
employé de moins de 40 ans
UPDATE Departement d1
SET d1.budget = d1.budget*1.1
WHERE EXISTS
(SELECT *
FROM THE (SELECT d2.employes
FROM Departement d2
WHERE d1.noDept=d2.noDept
)e
WHERE e.age<40
);
81
82
41
IV. Tables imbriquées
Modification Suppression DELETE FROM Departement d1
WHERE EXISTS
(NESTEDTABLE0Rsuppr.sql)
(SELECT *
Exemple 1 : Suppression dans la FROM THE (SELECT d2.employes
table principale, ceci entraîne FROM Departement d2
également la suppression de la
WHERE d1.noDept=d2.noDept
table imbriquée si elle existe.
)e
DELETE FROM Departement d WHERE e.nom='Toto';
WHERE d.noDept='D1'; );
83
84
42
III. Tables imbriquées
Exercice Departement Employe
On voudrait que la suppression noDept noEmp
d’un département n’entraine la budget 1 1..*
nom
age
suppression de tous les employés
de ce département.
On utilisera la solution 3 de
l’association N-N avec propriété,
sauf qu’ici l’association n’aura pas
de propriété Employe
Il faut créer une table pour les Departement
employés noEmp
noDept nom
Créer une liste de pointeur vers les budget age
employés dans la table employes
Departement contient
refEmploye
85
86
43
IV. Tables imbriquées
4.4. Plusieurs tables NESTEDTABLE20R.sql
CREATE OR REPLACE TYPE empType AS OBJECT
imbriquées (noEmp NUMBER, nom VARCHAR2(30), age
On peut définir une table NUMBER);
relationnelle ou OR qui contient CREATE OR REPLACE TYPE empsType AS TABLE OF
plusieurs tables imbriquées. empType;
CREATE OR REPLACE TYPE burType AS OBJECT
Exemple :
(noBur NUMBER);
Soit la table Departement qui
contient les deux tables imbriquées CREATE OR REPLACE TYPE burxType AS TABLE OF
burType;
Bureaux et Employes.
CREATE OR REPLACE TYPE Dept2Type AS OBJECT
Departement (noDept VARCHAR2(13), budget NUMBER,
noDep budget {bureaux} {employes} bureaux burxType,
employes empsType);
numB noEmp nom age
CREATE TABLE Departement2 OF dept2Type
(CONSTRAINT Dept_PK PRIMARY KEY (noDept))
NESTED TABLE bureaux STORE AS tabBur,
NESTED TABLE employes STORE AS tabEmp2;
Créez les requêtes d’insertion, de
INP-HB/K. M. BROU BD avancées : SGBD Oracle OR modification et de suppression. 87
87
88
44
V. Tableaux de taille prédimensionnée
5.1. Présentation Exemple :
Stockage de trois numéros de
Tableaux de taille téléphone maximum par client.
prédimensionnées ou VARRAY
Varing ARRAY Client
Collection ordonnée et limitée numCl nom adr tel
d’éléments de même type. norue rue ville codePostal
Comme un tableau à une
dimension classique.
Remarque :
Si on connaît le nombre d’éléments
maximum d’une table imbriquée,
on peut utiliser un VARRAY à la
place d’une table imbriquée.
89
90
45
V. Tableaux de taille prédimensionnée
Insertion Insertion d’enregistrements dans
le VARRAY (utilisation du
VARRAYInsert.sql constructeur explicite). Un numéro
Insertion avec initialisation à vide de téléphone, un champ NULL ne
de le VARRAY (utilisation du pourra plus être modifié par
constructeur par défaut), aucun programme.
numéro de téléphone INSERT INTO Client VALUES(3,'Froto',
INSERT INTO Client VALUES adresseType(621, 'Kakredou','Menecre',534),
(5,'Toto',adresseType(21,'rue du telsType(telType(30641212), NULL,
commerce','Abidjan','1234'), telsType()); NULL));
91
92
46
V. Tableaux de taille prédimensionnée
Modification
VARRAYModif.sql
Utilisation de PL/SQL DECLARE
newTels telsType ;
Modification d’enregistrements BEGIN
dans le VARRAY SELECT tels INTO newTels
Modification du deuxième numéro FROM Client
de téléphone du client de numéro WHERE numCl=5;
5. newTels(2).numTel := 07846367;
UPDATE Client
SET tels = newTels
WHERE numCl = 5;
END;
/
93
94
47
V. Tableaux de taille prédimensionnée
5.2. Fonctions de MAJ de
collections
Fonction Description Fonction Description
EXISTS(x) Retourne TRUE si le xe élément de la collection EXTEND Ajoute/insère un élément NULL dans la collection
existe EXTEND(x) Ajoute/insère x éléments NULL dans la collection
COUNT Retourne le nombre d’élément de la collection EXTEND(x,y) Ajoute/insère x copies du ye éléments dans la
LIMIT Retourne le nombre maximum d’éléments collection
d’un VARRAY DELETE Vide/Supprime tous les éléments de la collection
FIRST Retourne le premier indice de l’élément de la DELETE(x) Réservé aux NESTED TABLE, supprime le xe
collection éléments de la collection.
LAST Retourne le dernier indice de l’élément de la DELETE(x,y) Réservé aux NESTED TABLE, supprime les
collection éléments d’indice x à y de la collection
95
96
48
V. Tableaux de taille prédimensionnée
Ajout de 2 copies du 1er elt de la Supprime les elts d'indice 4 à 5 de
NESTED TABLE employes de la la NESTED TABLE employes de la
table Departement table Departement
DECLARE DECLARE
newEmps empsType; newEmps empsType;
BEGIN BEGIN
SELECT employes INTO newEmps SELECT employes INTO newEmps
FROM Departement FROM Departement
WHERE noDept = 'D3'; WHERE noDept = 'D3';
newEmps.EXTEND(2,1); newEmps.DELETE(4,5);
UPDATE Departement UPDATE Departement
SET employes = newEmps SET employes = newEmps
WHERE noDept = 'D3'; WHERE noDept = 'D3';
END; END;
/ /
97
98
49
VI. Interrogation
6.1. TAD utilisé par une table Exemple 3 :
Utilisation d’un alias
Exemple 1 :
SELECT numCl, nom, adr.*
SELECT numCl, nom, c.adr.noRue, c.adr.ville
FROM Client;
FROM Client c ;
adr.* affiche toutes les colonnes de SELECT numCl, nom, c.adr.noRue, c.adr.ville
adr
FROM Client c
Exemple 2 : WHERE c. adr.noRue=21;
SELECT numCl, nom, adr.noRue, adr.ville
FROM Client ;
99
VI. Interrogation
6.2. Table avec pointeur Fonction VALUE()
s’applique à tout type et restitue
Commande Client en particulier les valeurs des
numCom dateCom @estPassee numCl nom pointeurs.
1 13/12/06 5 Toto SELECT VALUE(c)
2 2/12/06 NULL 2 Fatou FROM Commande c
3 2/12/06 4 Mankou WHERE c.estPassee.numCl=5;
100
50
VI. Interrogation
6.3. SELECT dans une table La requête qui suit le mot clé THE
doit comporter une clause WHERE
imbriquée désignant un seul objet
Departement ERREUR à la ligne 1 :
noDep budget {employes} ORA-01427: Sous-interrogation
noEmp nom age ramenant un enregistrement de plus
d'une ligne
Mot clé THE SELECT e.noEmp, e.nom
Désigne la table imbriquée FROM THE (SELECT d.employes
employes FROM Departement d
)e;
SELECT e.noEmp, e.nom
FROM THE (SELECT d.employes
FROM Departement d Solution : utiliser un curseur
WHERE d.noDept='D3' imbriqué (NESTED CURSOR)
) e;
101
VI. Interrogation
NESTED CURSOR
Utilisé quand la requête qui suit
le mot clé THE ramène plusieurs
objets.
La clause CURSOR désigne le
curseur associé à la requête
SELECT.
La clause TABLE() permet de
traiter une table imbriquée comme
une table relationnelle.
SELECT CURSOR
(SELECT e.noEmp, e.nom
FROM TABLE(Employes) e
)
FROM Departement d;
102
51
VII. Les méthodes
7.1. Présentation Client
Commande
3 sortes de méthodes : numCl
MEMBER : méthode d’instance nom 1 estPassee * numCom
adresse dateCom
STATIC : méthode de classe
nbCommande()
CONSTUCTOR : constructeur
1
Exemple :
1
Nombre de commandes d’un client
Adresse
numero
rue
Ville
codepostal
103
104
52
VII. Les méthodes
Corps de la fonction Remarques :
Nombre de commandes d’un Toutes les méthodes sont de type
client. public, pas de type privé.
Type privé ou public possible
CREATE OR REPLACE TYPE BODY clientType AS
dans les paquetages.
MEMBER FUNCTION nbCommande RETURN NUMBER IS
Droit à un utilisateur pour
nbCom NUMBER; manipuler un TAD.
BEGIN
commande GRANT EXECUTE
SELECT COUNT(co.numCom) INTO nbCom nomDuTAD TO nomUser
FROM Client cl, commande co Mais pas l’accès à certaines
WHERE cl.numCl = co.estPassee.numCl AND méthodes.
cl.numCl=SELF.numCl;
RETURN nbCom;
END nbCommande;
END;
/
105
106
53
VII. Les méthodes
Appel d’une méthode fonction SET SERVEROUTPUT ON
dans un programme PL/SQL DECLARE
cmdNbCl clientType; --création de linstance
Fonction VALUE() : renvoie la
nb NUMBER;
valeur d’un TAD
BEGIN
Le client 5 a 3 commandes SELECT VALUE(c) INTO cmdNbCl –initialisation de l’instance
VALUE(c) extrait une instance FROM Client c
WHERE c.numCl = 5;
nb :=cmdNbCl.nbCommande(); --appel de la méthode
DBMS_OUTPUT.PUT_LINE('Le client 5 a ' || nb || '
commandes');
END;
/
107
SET SERVEROUT ON
CREATE OR REPLACE PROCEDURE
nombreCommande(numC IN NUMBER) IS
nb NUMBER;
cl clientType;
BEGIN
cl := clientType(numC,'', NULL); --instanciation
nb := cl.nbCommande();
DBMS_OUTPUT.PUT_LINE('Le client ' || numC || ' a ' ||
nb || ' commandes');
END;
/
108
54
VII. Les méthodes
Appel d’une méthode fonction Ajout d’une méthode à un TAD
dans une requête Date de la commande d’un client
SELECT c.nbCommande() "nombre de commandes" donné
FROM Client c ALTER TYPE clientType
WHERE c.numCl=5; ADD MEMBER FUNCTION montantCom(numC IN
NUMBER) RETURN NUMBER CASCADE;
109
110
55
VII. Les méthodes
SELECT c.montantCom(2) "Montant de la commande 1" Suppression de méthode
FROM Client c
WHERE c.numCl=2; ALTER TYPE clientType
DROP MEMBER FUNCTION montantCom (numC IN NUMBER)
RETURN NUMBER CASCADE
SELECT c.dateCom(2) "date de la commande 2"
FROM Client c WHERE c.numCl=2;
111
112
56
VII. Les méthodes
Schéma navigationnel à utiliser Extensions des tables
113
114
57
VII. Les méthodes
Création du corps de la
procédure MEMBER PROCEDURE modifDateCom (numC NUMBER,
nouvDate IN DATE) IS
CREATE OR REPLACE TYPE BODY clientType AS nbCom NUMBER;
MEMBER FUNCTION nbCommande RETURN NUMBER IS BEGIN
nbCom NUMBER; UPDATE Commande c
BEGIN SET c.dateCom = nouvDate
SELECT COUNT(co.numCom) INTO nbCom WHERE co.numCom = numC AND
FROM Client cl, commande co c.estPassee.numCl=SELF.numCl;
WHERE cl.numCl = co.estPassee.numCl AND END modifDateCom;
cl.numCl=SELF.numCl; END;
RETURN nbCom; /
END nbCommande;
115
116
58
VII. Les méthodes
Appel d’une procédure :
Fonction VALUE() : renvoie la
valeur d’un TAD
SELECT numCom, dateCom, co.estPassee.numCl, SELECT numCom, dateCom,
co.estPassee.nom co.estPassee.numCl,
FROM Commande co co.estPassee.nom
/ FROM Commande co
Rem modification de la dateCom de la commande 1 du /
client de numéro 2
DECLARE Remarque :
comModifDate clientType; On ne peut pas appeler une
BEGIN procédure dans une requête
SELECT VALUE(c) INTO comModifDate
FROM Client c Surcharge possible des
WHERE c.numCl = 2; méthodes
comModifDate.modifDateCom(1, '31/12/06');
END;
/
117
118
59
VII. Les méthodes
7.4. Méthode STATIC Toute action de la méthode
s’applique à toutes les instances
Static
Exemple :
Indique que la méthode doit être
exécutée comme méthode de Une méthode qui affecte la
classe et non appliquée à un même date de commande à
objet. tous les commande.
chaque instance ne nécessite pas
sa propre implémentation de la
méthode.
Contrairement aux méthodes
normales, les méthodes static ne
dépendent pas des instances de
leur classe.
Pas possible d’utiliser le
paramètre SELF
119
120
60
VII. Les méthodes
Appel de la méthode Avant appel
Syntaxe
nomDuType.nomMethode(par
ametre);
DECLARE
BEGIN
commandeType.imposeDateCom('31/04/2011');
END;
/ Après appel
121
122
61
VII. Les méthodes
Corps des méthodes
CREATE OR REPLACE TYPE BODY clientType AS
…
CONSTRUCTOR FUNCTION clientType RETURN SELF AS RESULT IS
BEGIN
SELF.numCl := 0;
SELF.nom := '';
SELF.adr := adresseType(12,'rue SDF', 'Dakar','134');
RETURN;
END;
123
DECLARE
newcl1 clientType;
newcl2 clientType;
newcl3 clientType;
BEGIN
newcl1 := new clientType();
newcl2 := new clientType(10,'Papinou');
newcl3 := new clientType(13,'Froto',adresseType(12,'rue SDF', 'Dakar','134'));
DBMS_OUTPUT.PUT_LINE(newcl1.numCl||' '||newcl1.nom|| ' '||newcl1.adr.ville);
DBMS_OUTPUT.PUT_LINE(newcl2.numCl||' '||newcl2.nom|| ' '||newcl2.adr.ville);
DBMS_OUTPUT.PUT_LINE(newcl3.numCl||' '||newcl3.nom|| ' '||newcl3.adr.ville);
END;
/
124
62
VII. Les méthodes
Remarque CREATE OR REPLACE TYPE clientType AS OBJECT
L’appel du constructeur ayant le (numCl NUMBER,
même nombre d’argument que le nom VARCHAR2(20),
adr adresseType,
TAD génère une erreur. MEMBER FUNCTION nbCommande RETURN NUMBER,
Par défaut un tel constructeur MEMBER PROCEDURE modifDateCom(nouvDate IN DATE),
CONSTRUCTOR FUNCTION clientType RETURN SELF AS
existe RESULT,
CONSTRUCTOR FUNCTION clientType (m IN NUMBER, n IN
VARCHAR2) RETURN SELF AS RESULT
CONSTRUCTOR FUNCTION clientType (m IN NUMBER, n
IN VARCHAR2, a adresseType) RETURN SELF AS
RESULT
)
125
126
63
VII. Les méthodes
Corps des méthodes
STATIC PROCEDURE affiche(dCom IN DATE) IS
CREATE OR REPLACE TYPE BODY clientType AS CURSOR curCl IS
… SELECT numCom, dateCom, co.estPassee.numCl
STATIC PROCEDURE affiche IS AS numCl, co.estPassee.nom AS nom
CURSOR curCl IS FROM Commande co
SELECT numCom, dateCom, co.estPassee.numCl WHERE dateCom = dCom;
AS numCl, co.estPassee.nom AS nom BEGIN
FROM Commande co; FOR rCl IN curCl
BEGIN LOOP
FOR rCl IN curCl DBMS_OUTPUT.PUT_LINE(rCl.numCl||'
LOOP '||rCl.nom||' '||rCl.numCom||' '||rCl.dateCom) ;
DBMS_OUTPUT.PUT_LINE(rCl.numCl||' END LOOP ;
'||rCl.nom||' '||rCl.numCom||' '||rCl.dateCom) ; END affiche;
END LOOP ; END;
END affiche; /
127
DECLARE
BEGIN
clientType.affiche;
END;
/
DECLARE
BEGIN
clientType.affiche('12/12/2006');
END;
/
128
64
VII. Les méthodes
7.7. Redéfinition de méthodesCREATE OR REPLACE TYPE personneType AS OBJECT
(numP NUMBER,
Surcharge.sql nom VARCHAR2(20),
Personne adr adresseType,
numP STATIC PROCEDURE affiche
nom ) NOT FINAL;
adresse CREATE OR REPLACE TYPE clientType UNDER personneType
affiche() (compte NUMBER,
STATIC PROCEDURE affiche
) NOT FINAL;
CREATE OR REPLACE TYPE clientSpecialType UNDER clientType
Client (remise NUMBER);
compte
affiche() CREATE TABLE Personne OF personneType
(CONSTRAINT personne_numP_PK PRIMARY KEY (numP));
CREATE TABLE Client OF clientType
(CONSTRAINT client_numP_PK PRIMARY KEY (numP));
CREATE TABLE ClientSpecial OF clientSpecialType
ClientSecial
(CONSTRAINT clientSpec_numP_PK PRIMARY KEY (numP))
remise
/
129
130
65
VII. Les méthodes
Appel
Requête Commentaire
DECLARE
BEGIN
personneType.affiche;
END;
/
DECLARE
BEGIN
clientType.affiche;
END;
/
DECLARE
BEGIN
clientSpecialType.affiche;
END;
/
131
132
66
VIII. Vues et Triggers
8.1. Création de Vue objet- Principe :
relationnelle Définir un type de données
(CREATE TYPE…) qui formera la
Créée à partir structure de la vue ;
d’une ou plusieurs tables objet- Écrire la requête (AS SELECT…)
relationnelles ; qui décrit les objets de la vue ;
d’une ou plusieurs tables Spécifier un identifiant (OID)
relationnelles ; basé sur un attribut de la vue
d’une ou plusieurs vues objet- pour pouvoir référencer chaque
relationnelles. objet de la vue (REFs). Se servir
de préférence d’une clé primaire ;
Programmer des déclencheurs
INSTEAD OF (optionnel) si la vue
doit être modifiée.
133
134
67
VIII. Vues et Triggers
Création de la vue
CREATE OR REPLACE TYPE adresseType AS OBJECT
(norue NUMBER, rue VARCHAR2(15),
ville VARCHAR2(15), codePostal VARCHAR2(10)
)
/
CREATE OR REPLACE TYPE clientAbjType AS OBJECT
(numCl NUMBER, nom VARCHAR2(20),
adresse adresseType, Clause WITH OBJECT IDENTIFIER
pays VARCHAR2(15) Permet d’attribuer à chaque
)
/
objet de la vue a un OID
CREATE OR REPLACE VIEW vueClientAbj OF ClientAbjType SELECT REF(cl) FROM vueClientAbj cl;
WITH OBJECT IDENTIFIER (numCl)
AS SELECT cl.numCl, cl.nom,
adresseType(cl.norue,cl.rue,cl.ville,cl.codePostal),cl.pays
FROM Client cl
WHERE cl.ville='Abidjan'
/
SELECT cl.numCl, cl.nom, cl.adresse.rue, cl.adresse.ville
FROM vueClientAbj cl
/
INP-HB/K. M. BROU BD avancées : SGBD Oracle OR 135
135
136
68
VIII. Vues et Triggers
Exemple
La vue vueClientAbj est
modifiable
INSERT INTO vueClientAbjVALUES
(5, 'Baba', adresseType(21,'rue SDF', 'Saint-Louis', '1234'));
SELECT cl.numCl, cl.nom, cl.adr.norue, cl.adr.rue FROM Client cl;
137
138
69
VIII. Vues et Triggers
Exemple
Imposer que lors d’une
insertion dans la vue, la ville
soit Yakro.
Rem ne marche
CREATE OR REPLACE TRIGGER trigVueClientYakro
INSTEAD OF INSERT ON vueClientAbj FOR EACH
ROW
BEGIN
INSERT INTO Client
VALUES(:new.numCl,:new.nom,:new.adresse.norue,:
new.adresse.rue,'Yakro',:new.adresse.codePostal,:ne
w.pays)
END;
/
139
Bibliographie
Livres : "Cours d’introduction Modèles
"Objet-relationnel sous Oracle8, d’interactions pour le client
Modélisation avec UML", serveur et exemples
Christian Soutou, Eyrolles. d’architectures les implantant",
Gérard Florin, Conservatoire
" Les bases de données Oracle National des Arts et Métiers,
8i Développement Administration Laboratoire CEDRIC
Optimisation ", Roger Chapuis,
DUNOD "Oracle 10g sous Windows",
Giles Briard, Edition Eyrolles
" Client-Serveur, moteur SQL, 2006
middleware et architectures
parallèles ", Serge MIRANDA et "Programmation Objet avec
Anne RUOLS, Editions Eyrolles. Oracle, Techniques et pratiques",
2e édition, Christian SOUTOU,
"Oracle 11g Administration", Edition Vuibert.
Olivier HEURTEL, Edition ENI.
140
70
Bibliographie
Supports Oracle Formation :
Programmer avec PL/SQL
Le langage SQL & l’outil SQL*Plus
141
Bibliographie
Webographie : UML
http://lifc.univ- http://www.epi.asso.fr/revue/ar
fcomte.fr/~lasalle/OracleV7/pag ticles/a0509b.htm
e1.htm de Marie-France Lasalle :
[email protected]
http://www.hds.utc.fr/~crozatst
/ftp/nf17/7.sgbdro.pdf#search=
%22h%C3%A9ritage%2BSQL3
%22
http://www2.lifl.fr/~durif/bdd/
coursBD/html/developpement.ht
ml
"Les aspects objet-relationnels,
d’Oracle (de la V8 à la 11g)",
Christian Soutou,
http://www.soutou.net/christian
142
71