bases de donn ees avanc ees - limsi

Post on 16-Jun-2022

12 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Bases de Donnees AvanceesUML et SQL 2/3

Thierry Hamon

Bureau H202Institut Galilee - Universite Paris 13

&LIMSI-CNRS

hamon@limsi.fr

https://perso.limsi.fr/hamon/Teaching/P13/BDA-INFO2-2018-2019/

INFO2 – BDA

1/193

PlanDe UML a SQL 2/3, Objet-Relationnel, Oriente-Objet

Introduction

De UML a SQL2(du conceptuel au relationnel etendu – objet-relationnel)

De UML a SQL3(du conceptuel a l’oriente objet)

Conclusion

2/193

Conception, Developpement, Utilisation, Administration

1 Etape conceptuelle : Conception et Modelisation de bases dedonnees

2 Etape logique : Implantation d’une base de donnees

3 Etape physique :

4 Logiciels (SGBD, Interfaces, ...) & Materiels

3/193

Modelisation de Bases de DonneesPhase d’analyse : definition d’un schema conceptuelSchema Conceptuel de Donnees (SCD) : selon le formalismeutilise,

ensemble d’Entites et d’Associationsouensemble de Classes

Formalisme EA, ER

Formalisme UML :

4/193

Modelisation de Bases de Donnees

Differents formalismes de modelisation de schemas conceptuels deBD :

Formalisme EA, ER, EER

Modele Entite-Association (Entity-Relationship Model)Modele Entite-Association Etendu (ExtendedEntity-Relationship Model

Formalisme UML (Unified Modelling Language)

5/193

Modele Entite-AssociationRappel

Entite : tout concept concret ou abstrait individualisable

Classe ou type d’entites : regroupement d’entites de memenature (niveau generique)

Association : relation liant plusieurs entites

Classe ou type d’associations) : regroupement d’associationspresentant les memes caracteristiques

6/193

Modele entite-association etendu

Modele entite-association : jeu de concept reduit maissuffisant pour la modelisation de problemes simples (ou peucomplexes)

Modele Entite-association etendu : Modelisation plus preciseet plus expressive de problemes complexes et de grande taille

Introduction de mecanismes d’abstraction

de classificationd’heritaged’agregation

7/193

Types faibles

Type d’entites ou d’associations faibles :

existence d’une instance subordonnee a l’existence d’un autretype d’entite ou d’association

8/193

Classification

Regroupement d’entites dans des classes en fonction deproprietes communes

Possibilite de classer un objet dans plusieurs classes

Exemple :

Livre electronique : fichier electronique, et livre

Autocar : vehicule de transport en commun, vehicule amoteur a explosion

9/193

HeritageSpecialisation - Generalisation

Un type d’ entite A est une specialisation d’un autre type d’entiteB si

chaque entite de A est une entite de BUne seule entite (au plus) de B est associe a une entite de A

10/193

Agregation

Description de types d’entites complexesUn type d’associations entre types d’entites est considere commeun nouveau type d’entites

11/193

Modelisation de Bases de DonneesLes deux formalismes E/R et UML sont tres proches /� equivalents �

Entite/Association → UMLEntite ObjetType d’entite ClasseRelation ObjetType d’association ClasseAttribut/Propriete ProprieteRole / Label Role

Methode

Domaine Contrainte de domaineCle Contrainte de cleContrainte ContrainteCardinalite Multiplicite/Cardinalite0,1 1,1 0,n 1,n a,b a,a 0..1 1 0..* 1..* a..b a

Diagramme E/A Diagramme de Classe UML

12/193

De EA a SQL

Objectifs :

Implantation d’un schema conceptuel (SCD) dans un BDrelationnelle

Exploitation du SCD par le SGBD et les modules deprogrammation

→ Transformation dans un schema relationnel : Schema Logiquede Donnees (SLD)

13/193

De EA a SQLExemple de schema conceptuel EA (SCD)

14/193

De EA a SQLExemple de schema logique (schema relationnel) SLD

R1 ENT 2 ( B1 , B2 , B3 )R2 ENT 1 ( A1 , A2 , B1 ∗)R3 ENT 3 ( C1 , C2 )R4 ENT 4 ( D1 )R5 ASSOC 6 ( B1∗ , C1∗ , D1∗ , X1 )

15/193

Regles de passagedu modele Entite-Association au modele Relationnel

Tout type d’entite E est traduit en une relation R

La cle primaire de R est l’identifiant de ELes attributs de R sont ceux de E.

Tout type d’association est traduit :

en une cle etrangere dans une relation existante si lacardinalite est du type 1,1 ou 0,1

en une nouvelle relation si aucune cardinalite n’est du type 1,1

ou 0,1 (elles sont toutes du type 0,n ou 1,n)

Plusieurs algorithmes sont possibles selon l’interpretation de lacardinalite minimale egale a 0.

16/193

De UML a SQL

Traduction des associations binaires

Traduction des associations binaires recursives

Traduction des associations n-aires (n > 2)

Traduction des associations d’heritage

Traduction des contraintes d’heritage

Traduction des associations d’agregation

Traduction des contraintes d’integrite fonctionnelles(contraintes : Partition, Exclusion, Totalite, Simultaneite,Inclusion)

17/193

Integrite des donnees (1)

Les SGBD prennent en compte l’integrite des donnees definies via

la declaration de contraintes (constraints)

la programmation de

fonctions (functions)de procedures (procedures) catalogueesde paquetages (packages)de declencheurs (triggers)

Le principe etant d’assurer la coherence de la base apres chaquemise a jour par les commandes insert, update ou delete

18/193

Integrite des donnees (2)

Notation utilisee concernant les noms des contraintes :

la contrainte cle primaire d’une table se nomme pk table

la contrainte cle etrangere d’une table se nommefk table1 colonne table2

la contrainte de validite d’une colonne se nommeck table colonne

la contrainte de type non nulle sur une colonne se nommenn table colonne

la contrainte de type unique sur une colonne se nommeunique table colonne

19/193

Traduction des associations binaires (1)Association du type 1-1

REM ∗∗∗ Un s t a g e e s t e f f e c t u e par au p l u s un e t u d i a n t

create tab l e STAGE( NUMEROS number ( 7 ) ,

NOMENTREPRISE varchar ( 4 0 ) ,TELENT varchar ( 1 5 ) ,ADRENT varchar ( 5 0 ) ,con s t r a i n t PK STAGE primary key (NUMEROS)

) ;

20/193

Traduction des associations binaires (2)Association du type 1-1

REM ∗∗∗ Un e t u d i a n t e f f e c t u e o b l i g a t o i r e m e n t un s t a g e unique

c r ea te t ab l e ETUDIANT( NUMEROE number ( 7 ) ,

NOM va rcha r ( 1 0 ) ,PRENOM va rcha r ( 1 0 ) ,DATENAISSANCE date ,SEXE char ( 1 ) ,NUMEROS number ( 7 ) ,c o n s t r a i n t PK ETUDIANT pr imary key (NUMEROE) ,c o n s t r a i n t FK ETUDIANT NUMEROS STAGE f o r e i g n key (NUMEROS)

r e f e r e n c e s STAGE(NUMEROS) ,c o n s t r a i n t CK ETUDIANT SEXE check (SEXE i n ( ’M’ , ’ F ’ ) ) ,

−−c o n s t r a i n t NN ETUDIANT NUMEROS check (NUMEROS i s not n u l l ) ,c o n s t r a i n t UNIQUE ETUDIANT NUMEROS unique (NUMEROS)

) ;

21/193

Traduction des associations binaires (1)Association du type 1-N

REM ∗∗∗ Une p e r s o n n e peut p o s s e d e r p l u s i e u r s v o i t u r e s

c r ea te t ab l e PERSONNE(

NUMEROP number ( 7 ) ,NOM va rcha r ( 1 0 ) ,PRENOM va rcha r ( 1 0 ) ,DATENAISSANCE date ,SEXE char ( 1 ) ,c o n s t r a i n t PK PERSONNE pr imary key (NUMEROP)

) ;

22/193

Traduction des associations binaires (2)Association du type 1-N

REM ∗∗∗ Une v o i t u r e e s t o b l i g a t o i r e m e n t p o s s e d e e par une p e r s o n n e unique

c r ea te t ab l e VOITURE(

NUMIMMAT va rcha r ( 1 5 ) ,MARQUE va rcha r ( 2 0 ) ,TYPE va rcha r ( 3 0 ) ,NUMEROP number ( 7 ) ,c o n s t r a i n t PK VOITURE pr imary key (NUMIMMAT) ,c o n s t r a i n t FK VOITURE NUMEROP PERSONNE f o r e i g n key (NUMEROP)

r e f e r e n c e s PERSONNE(NUMEROP) ,

−−c o n s t r a i n t NN VOITURE NUMEROP check (NUMEROP i s not n u l l )

) ;

23/193

Traduction des associations binaires (1)Association du type N-N

REM ∗∗∗ Une p e r s o n n e peut c r e e r p l u s i e u r s e n t r e p r i s e s

c r ea te t ab l e PERSONNE(

NUMEROP number ( 7 ) ,NOMP va rcha r ( 1 0 ) ,PRENOM va rcha r ( 1 0 ) ,DATENAISSANCE date ,SEXE char ( 1 ) ,c o n s t r a i n t PK PERSONNE pr imary key (NUMEROP)

) ;

24/193

Traduction des associations binaires (2)Association du type N-N

REM ∗∗∗ Une e n t r e p r i s e d o i t e t r e c r e e eREM par une ou p l u s i e u r s p e r s o n n e s

create tab le ENTREPRISE(

NSIRET varchar ( 2 0 ) ,NOME varchar ( 2 0 ) ,STATUTJUR varchar ( 1 0 ) ,const ra in t PK ENTREPRISE primary key ( NSIRET )

) ;

25/193

Traduction des associations binaires (3)Association du type N-N

create tab l e CREER(

NUMEROP number ( 7 ) ,NSIRET varchar ( 2 0 ) ,DATECREATION date ,con s t r a i n t PK CREER primary key (NUMEROP, NSIRET ) ,con s t r a i n t FK CREER NUMEROP PERSONNE

f o r e i gn key (NUMEROP)r e f e r e n c e s PERSONNE(NUMEROP) ,

con s t r a i n t FK CREER NSIRET ENTREPRISEf o r e i gn key ( NSIRET )r e f e r e n c e s ENTREPRISE( NSIRET )

) ;

La cardinalite minimale de l’association creer pourra etre testee parl’intermediaire d’une procedure PL/SQL

26/193

Traduction des associations binaires (1)Association du type Reflexif/Recursif, UML ∼ EA

c r ea te t ab l e PERSONNES(

NUMERO number ( 7 ) , NOM va rcha r ( 1 5 ) , PRENOM va rcha r ( 1 5 ) ,DATENAISSANCE date , SEXE char ( 1 ) , PERE number ( 7 ) ,MERE number ( 7 ) ,c o n s t r a i n t PK PERSONNES pr imary key (NUMERO) ,c o n s t r a i n t FK PERSONNES PERE PERSONNES f o r e i g n key (PERE)

r e f e r e n c e s PERSONNES,c o n s t r a i n t FK PERSONNES MERE PERSONNES f o r e i g n key (MERE)

r e f e r e n c e s PERSONNES,c o n s t r a i n t CK SEXE PERSONNES check (SEXE i n ( ’M’ , ’ F ’ ) )

) ;

27/193

Traduction des associations binaires (2)Association du type Reflexif/Recursif, UML ∼ EA

c r ea te t ab l e PRODUITS(

NUMERO number ( 3 ) , NOM va rcha r ( 1 5 ) , QSTOCK number ( 5 ) ,c o n s t r a i n t PK PRODUITS pr imary key (NUMERO) ,c o n s t r a i n t CK QSTOCK PRODUITS check (QSTOCK >= 0)

) ;

28/193

Traduction des associations binaires (3)Association du type Reflexif/Recursif, UML ∼ EA

c r ea te t ab l e NOMENCLATURE(

COMPOSER number ( 3 ) , COMPOSANT number ( 3 ) , QFABR number ( 5 ) ,c o n s t r a i n t PK NOMENCLATURE pr imary key (COMPOSER, COMPOSANT) ,c o n s t r a i n t FK NOMENCL COMPOSER PRODUITS f o r e i g n key (COMPOSER)

r e f e r e n c e s PRODUITS ,c o n s t r a i n t FK NOMENCL COMPOSANT PRODUITS f o r e i g n key (COMPOSANT)

r e f e r e n c e s PRODUITS ,c o n s t r a i n t CK QFABR NOMENCLATURE check (QFABR >= 0)

) ;

→ Definition de requetes recursives

29/193

Traduction des associations d’heritageTraduction des contraintes d’heritage

Gestion du personnel dans une universite

30/193

Associations d’heritage dans UML (1)

Recensement des differents cas d’heritage en fonction desinstances

Modelisation des differents heritages, dans le formalismeUML, a l’aide des contraintes

partitionexclusiontotalite

31/193

Associations d’heritage dans UML (2)

Expression des cas d’heritage a l’aide de

couverture

disjonction

d’instances dans une population donnee

Quatre type de contraintes sont recenses :

partition

totalite

exclusion

absence de contrainte

32/193

Contraintes d’heritages PARTITION et TOTALITE

Disjonction & Couverture → Partition

Non-Disjonction & Couverture → Totalite

33/193

Contraintes d’heritages EXCLUSION et ABSENCE DE

CONTRAINTE

Disjonction & Non-Couverture → ExclusionNon-Disjonction & Non-Couverture → Absence de contrainte

34/193

Exemple (1)Gestion du personnel dans une universite

Couverture + Disjonction → Partition

Personnel (P) est egal a l’Union de Enseignant (EC) et deBIATOS (B) et l’Intersection de EC et de B est Vide

Couverture + Non-Disjonction → Totalite

Personnel (P) est egal a l’Union de Enseignant (EC) et deBIATOS (B) et l’Intersection de EC et de B n’est pas Vide

35/193

Exemple (2)Gestion du personnel dans une universite

Non-Couverture + Disjonction → Exclusion

L’Union de Enseignant (EC) et de BIATOS (B) est inclusedans P et l’Intersection de EC et de B est Vide

Non-Couverture + Non-Disjonction → Absence de contraintes

L’Union de Enseignant (EC) et de BIATOS (B) est inclusedans P et l’Intersection de EC et de B n’est pas Vide

36/193

Transformation des associations d’heritage

Traduction d’une association d’heritage en fonction des contraintesde l’association d’heritage→ 3 familles de decomposition :

Decomposition par distinction

Decomposition descendante (push-down)

Decomposition ascendante (push-up)

37/193

Decomposition par distinction

Transformation de chaque sous-classe en une relation

Migration de la cle primaire de la sur-classe dans la ou lesrelations issues des sous-classes

La cle primaire de la sur-classe devient a la fois cle primaire etcle etrangere

DistinctionPERSONNEL( Numero , Nom, Prenom ,

DateNaissance , Sexe )

ENSEIGNANT( Numero∗ ,Echelon ,I n d i c e , S p e c i a l i t e )

BIATOS( Numero∗ , DateEmbauche ,S e r v i c e )

38/193

Decomposition descendante

Deux cas possibles selon la contrainte d’heritage :

Contrainte de totalite ou de partition sur l’association :Possibilite de ne pas traduire la relation issue de la sur-classe→ Migration de tous les attributs dans la ou les relationsissues de la ou des sous-classes

Sinon : Migration de tous les attributs dans la ou les relationsissues de la ou des sous-classes→ Duplication des donnees

39/193

Decomposition descendanteExemple

Contrainte de partition :

Aucun personnel ne peut etre a la fois enseignant et BIATOS

Il n’existe pas non plus un personnel n’etant ni enseignant nibiatos.

DescendanteENSEIGNANT( Numero ,

Nom, Prenom , DateNaissance ,Sexe , Echelon , I n d i c e ,S p e c i a l i t e )

BIATOS( Numero , Nom, Prenom ,DateNaissance , Sexe ,DateEmbauche , S e r v i c e )

40/193

Decomposition ascendante

Suppression de la ou les relations issues de la ou dessous-classes

Migration des attributs dans la relation issue de la sur-classe

Exemple : (absence de contrainte)Ascendante

PERSONNEL( Numero , Nom, Prenom ,DateNaissance , Sexe ,Echelon , I n d i c e ,S p e c i a l i t e ,DateEmbauche , S e r v i c e )

41/193

Transformation des associations d’heritage multiple

Memes regles ; plusieurs possibilitesExemple : (decomposition ascendante)Contrainte d’exclusion sur enseignant et BIATOS

PERSONNEL( Numero , Nom, Prenom ,DateNaissance , Sexe )

ENSEIGNANT ( Numero∗ ,Echelon , I n d i c e , S p e c i a l i t e ,DateDebutStage , DateF inStage )

BIATOS( Numero∗ , DateEmbauche ,S e r v i c e ,

DateDebutStage , DateF inStage )

42/193

Transformation des associations d’heritage en SQL 2Exemple

Gestion du personnel dans une universite

43/193

Transformation des associations d’heritageDecomposition par distinction

DistinctionPERSONNEL( Numero , Nom, Prenom ,

DateNaissance , Sexe )

ENSEIGNANT( Numero∗ ,Echelon ,I n d i c e , S p e c i a l i t e )

BIATOS( Numero∗ , DateEmbauche ,S e r v i c e )

REM ∗∗∗ Un p e r s o n n e l a l ’ U n i v e r s i t e

c r e a t e t a b l e PERSONNEL( NUMERO number ( 7 ) ,

NOM v a r c h a r ( 1 0 ) ,PRENOM v a r c h a r ( 1 0 ) ,DATENAISSANCE date ,SEXE c h a r ( 1 ) ,c o n s t r a i n t PK PERSONNEL p r i m a r y key (NUMERO) ,c o n s t r a i n t CK SEXE PERSONNEL check (SEXE i n ( ’M’ , ’ F ’ ) )

) ;

44/193

Transformation des associations d’heritageDecomposition par distinction

REM ∗∗∗ P e r s o n n e l e n s e i g n a n t

c r ea te t ab l e ENSEIGNANT( NUMERO number ( 7 ) , ECHELON number ( 2 ) ,

INDICE number ( 5 ) , SPECIALITE va rcha r ( 2 0 ) ,c o n s t r a i n t PK ENSEIGNANT pr imary key (NUMERO) ,c o n s t r a i n t FK ENS PERS f o r e i g n key (NUMERO)

r e f e r e n c e s PERSONNEL) ;

REM ∗∗∗ P e r s o n n e l BIATOS ( Ing , Adm, Tech , Ouv , S e r v )

c r ea te t ab l e BIATOS( NUMERO number ( 7 ) , DATEEMBAUCHE date ,

SERVICE va rcha r ( 2 0 ) ,c o n s t r a i n t PK BIATOS pr imary key (NUMERO) ,c o n s t r a i n t FK BIATOS PERS f o r e i g n key (NUMERO)

r e f e r e n c e s PERSONNEL) ;

45/193

Transformation des associations d’heritageDecomposition descendante

DescendanteENSEIGNANT( Numero ,

Nom, Prenom , DateNaissance ,Sexe , Echelon , I n d i c e ,S p e c i a l i t e )

BIATOS( Numero , Nom, Prenom ,DateNaissance , Sexe ,DateEmbauche , S e r v i c e )

REM ∗∗∗ P e r s o n n e l e n s e i g n a n t

c r ea te t ab l e ENSEIGNANT( NUMERO number ( 7 ) , NOM va rcha r ( 1 0 ) ,

PRENOM va rcha r ( 1 0 ) , DATENAISSANCE date ,SEXE char ( 1 ) , ECHELON number ( 2 ) ,INDICE number ( 5 ) , SPECIALITE va rcha r ( 2 0 ) ,c o n s t r a i n t CK SEXE ENSEIGNANT check

(SEXE i n ( ’M’ , ’ F ’ ) )c o n s t r a i n t PK ENSEIGNANT pr imary key (NUMERO)

) ;

46/193

Transformation des associations d’heritageDecomposition descendante

DescendanteENSEIGNANT( Numero ,

Nom, Prenom , DateNaissance ,Sexe , Echelon , I n d i c e ,S p e c i a l i t e )

BIATOS( Numero , Nom, Prenom ,DateNaissance , Sexe ,DateEmbauche , S e r v i c e )

REM ∗∗∗ P e r s o n n e l BIATOS

c r ea te t ab l e BIATOS( NUMERO number ( 7 ) , NOM va rcha r ( 1 0 ) , PRENOM va rcha r ( 1 0 ) ,

DATENAISSANCE date , SEXE char ( 1 ) , DATEEMBAUCHE date ,SERVICE va rcha r ( 2 0 ) ,c o n s t r a i n t CK SEXE BIATOS check (SEXE i n ( ’M’ , ’ F ’ ) )c o n s t r a i n t PK BIATOS pr imary key (NUMERO)

) ;

46/193

Transformation des associations d’heritageDecomposition ascendante

AscendantePERSONNEL( Numero , Nom, Prenom ,

DateNaissance , Sexe ,Echelon , I n d i c e ,S p e c i a l i t e ,DateEmbauche , S e r v i c e )

REM ∗∗∗ P e r s o n n e l

c r ea te t ab l e PERSONNEL( NUMERO number ( 7 ) , NOM va rcha r ( 1 0 ) , PRENOM va rcha r ( 1 0 ) ,

DATENAISSANCE date , SEXE char ( 1 ) , ECHELON number ( 2 ) ,INDICE number ( 5 ) , SPECIALITE va rcha r ( 2 0 ) ,DATEEMBAUCHE date , SERVICE va rcha r ( 2 0 ) ,c o n s t r a i n t CK SEXE PERSONNEL check (SEXE i n ( ’M’ , ’ F ’ ) )c o n s t r a i n t PK PERSONNEL pr imary key (NUMERO)

) ;

47/193

Traduction des contraintes d’heritageDecomposition par distinction

→ Contrainte de partition

Contrainte de totalite

Contrainte d’exclusion

Sans ContrainteContraintes d’heritage :

(Contrainte A) Il n’existe pas de personnel a la fois enseignantet BIATOS

(Contrainte B) Il n’existe pas de personnel ni enseignant niBIATOS

48/193

Traduction des contraintes d’heritageDecomposition par distinction

Implementation de la contrainte A : 2 declencheurs

REM ∗∗∗ D e c l e n c h e u r s u r ENSEIGNANT

c r ea te or r e p l a c e t r i g g e r TRIG ENSEIGNANTb e f o r e i n s e r t or update o f NUMERO on ENSEIGNANTf o r each rowd e c l a r e

num number ;b e g i n

s e l e c t NUMERO INTO numfrom BIATOS where NUMERO = : new .NUMERO;r a i s e a p p l i c a t i o n e r r o r (−20001 , ’ Le p e r s o n n e l ’ | |

t o c h a r (num ) | | ’ e s t d e j a BIATOS ! ! ! ’ ) ;except i on

when n o d a t a f o u n d then n u l l ;end ;/

49/193

Traduction des contraintes d’heritageDecomposition par distinction

REM ∗∗∗ D e c l e n c h e u r s u r BIATOS

c r ea te or r e p l a c e t r i g g e r TRIG BIATOSb e f o r e i n s e r t or update o f NUMERO on BIATOSf o r each rowd e c l a r e

num number ;b e g i n

s e l e c t NUMERO INTO numfrom ENSEIGNANT where NUMERO = : new .NUMERO;r a i s e a p p l i c a t i o n e r r o r (−20001 , ’ Le p e r s o n n e l ’ | |

t o c h a r (num ) | | ’ e s t d e j a e n s e i g n a n t ! ! ! ’ ) ;except i on

when n o d a t a f o u n d then n u l l ;end ;/

50/193

Traduction des contraintes d’heritageDecomposition par distinction

Implementation de la contrainte B :

procedures cataloguees (Insertion, Suppression)

declencheurs (Modification)

REM ∗∗∗ Ajout d ’ un E n s e i g n a n t

c r e a t e or r e p l a c e p r o c e d u r e AJOUT ENSEIGNANT(NUM number , NOM v a r c h a r , PREN v a r c h a r , DNAIS date ,

SEXE v a r c h a r , ECHEL number , IND number , SPEC v a r c h a r ) i sb e g i n

i n s e r t i n t o PERSONNEL v a l u e s (NUM, NOM, PREN, DNAIS , SEXE ) ;i n s e r t i n t o ENSEIGNANT v a l u e s

(NUM, ECHEL , IND , SPEC ) ;end ;/

51/193

Traduction des contraintes d’heritageDecomposition par distinction

REM ∗∗∗ Ajout d ’ un BIATOS

c r e a t e or r e p l a c e p r o c e d u r e AJOUT BIATOS(NUM number , NOM v a r c h a r , PREN v a r c h a r , DNAIS date ,

SEXE v a r c h a r , DEMB date , SERV v a r c h a r ) i sb e g i n

i n s e r t i n t o PERSONNEL v a l u e s (NUM, NOM, PREN, DNAIS , SEXE ) ;i n s e r t i n t o BIATOS v a l u e s (NUM, DEMB, SERV ) ;

end ;/

52/193

Traduction des contraintes d’heritageDecomposition par distinction

REM ∗∗∗ S u p p r e s s i o n d ’ un E n s e i g n a n t

c r e a t e or r e p l a c e p r o c e d u r e SUPPR ENSEIGNANT(NUM number ) i sb e g i n

d e l e t e from ENSEIGNANT where NUMERO = num ;d e l e t e from PERSONNEL where NUMERO = num ;

end ;/

REM ∗∗∗ S u p p r e s s i o n d ’ un BIATOS

c r e a t e or r e p l a c e p r o c e d u r e SUPPR BIATOS(NUM number ) i sb e g i n

d e l e t e from BIATOS where NUMERO = num ;d e l e t e from PERSONNEL where NUMERO = num ;

end ;/

53/193

Traduction des contraintes d’heritageDecomposition par distinction

REM ∗∗∗ D e c l e n c h e u r pour l a r e p e r c u s s i o n de l a m o d i f i c a t i o nREM ∗∗∗ du numero du PERSONNEL v e r s ENSEIGNANT e t BIATOS

c r ea te or r e p l a c e t r i g g e r TRIG ENSBIATOSb e f o r e update o f NUMERO on PERSONNELf o r each rowb e g i n

b e g i nupdate ENSEIGNANTs e t NUMERO = : new .NUMEROwhere NUMERO = : o l d .NUMERO;

except i onwhen n o d a t a f o u n d then n u l l ;

end ;update BIATOS

s e t NUMERO = : new .NUMEROwhere NUMERO = : o l d .NUMERO;

except i onwhen n o d a t a f o u n d then n u l l ;

end ;/

54/193

Traduction des contraintes d’heritageUtilisation

REM ∗∗∗∗∗∗ I n s e r t i o n s des donn ees s o u s SQLPLUSREM ∗∗∗∗∗∗ Lancement des p r o c e d u r e s

s e l e c t ’ I n s e r t i o n d e s d o n n e e s ’ from d u a l ;PAUSE

execute AJOUT ENSEIGNANT ( 1 , ’TRAIFOR ’ , ’ Cl ement ’ ,’ 17−09−1958 ’ , ’M’ , 6 , 780 , ’BD ’ ) ;

execute AJOUT ENSEIGNANT ( 2 , ’TRAIFOR ’ , ’ C l e m e n t i n e ’ ,’ 22−11−1969 ’ , ’ F ’ , 6 , 780 , ’ IA ’ ) ;

execute AJOUT BIATOS ( 3 , ’FAITOUT ’ , ’ A lex ’ ,’ 16−10−1960 ’ , ’M’ , ’ 01−01−2002 ’ , ’ Commercia l ’ ) ;

PAUSE

s e l e c t ∗ from PERSONNEL ;s e l e c t ∗ from ENSEIGNANT ;s e l e c t ∗ from BIATOS ;PAUSE

55/193

Traduction des contraintes d’heritageDecomposition par distinction

→ Contrainte de totalite

Contraintes d’heritage :

(Contrainte B) Il n’existe pas de personnel ni enseignant ni BIATOS

(Contrainte C) Il peut exister un personnel a la fois enseignant etBIATOS

Implementation :

Contrainte B : voir ci-dessus

Contrainte C : equivaut a ne pas programmer la contrainte Aprecedente

⇒ Pas de mise en œuvre les declencheurs des tables ENSEIGNANT etBIATOS : TRIG_ENSEIGNANT, TRIG_BIATOS

56/193

Traduction des contraintes d’heritageDecomposition par distinction

→ Contrainte d’exclusion

Contraintes d’heritage :

(Contrainte A) Il n’existe pas de personnel a la fois enseignant etBIATOS

(Contrainte D) Il peut exister un personnel ni enseignant ni BIATOS

Implementation :

Contrainte A: voir ci-dessus

Contrainte D : equivaut a ne pas programmer la contrainte Bprecedente

⇒pas de mise en œuvre les quatre procedures (ajout et suppression)et le declencheur TRIG_ENSBIATOS

57/193

Traduction des contraintes d’heritageDecomposition par distinction

→ Sans Contrainte

Aucune contrainte n’est a programmer !

58/193

Traduction des contraintes d’heritageDecomposition descendante

DescendanteENSEIGNANT( Numero ,

Nom, Prenom , DateNaissance ,Sexe , Echelon , I n d i c e ,S p e c i a l i t e )

BIATOS( Numero , Nom, Prenom ,DateNaissance , Sexe ,DateEmbauche , S e r v i c e )

Contrainte de partition ? → aucun personnel ne peut etre a lafois enseignant et iatos et il n’existe pas non plus un personneln’etant ni enseignant ni iatos

Contrainte de totalite ?

Contrainte d’exclusion ? → il faudrait la table personnel pourles personnels non enseignant et non BIATOS

Sans contrainte !

59/193

Traduction des contraintes d’heritageDecomposition ascendante

→ Contrainte de partition

Contrainte de totalite

Contrainte d’exclusion

Sans Contrainte

Contraintes d’heritage :

(Contrainte A) Il n’existe pas de personnel a la fois enseignantet BIATOS

(Contrainte B) Il n’existe pas de personnel ni enseignant niBIATOS

60/193

Traduction des contraintes d’heritageDecomposition ascendante

Implementation des contraintes A et B :

au niveau de la table personnel

a l’aide des contraintes de type CHECK

Contrainte A :Verifier que les colonnes ECHELON, INDICE, SPECIALITE,DATEEMBAUCHE et SERVICE ne soient pas toutes initialisees

Contrainte B :Verifier que les colonnes ECHELON, INDICE, SPECIALITE,DATEEMBAUCHE et SERVICE ne soient pas toutes nulles

61/193

Traduction des contraintes d’heritageDecomposition ascendante

REM ∗∗∗∗ CONTRAINTE A

a l t e r t a b l e PERSONNELadd c o n s t r a i n t CK CONTRAINTE A

check ((ECHELON i s n u l l and INDICE i s n u l l and

SPECIALITE i s n u l l )or (DATEEMBAUCHE i s n u l l and SERVICE i s n u l l )

) ;

REM ∗∗∗∗ CONTRAINTE B

a l t e r t a b l e PERSONNELadd c o n s t r a i n t CK CONTRAINTE B

check ((ECHELON i s not n u l l or INDICE i s not n u l l or

SPECIALITE i s not n u l l )or (DATEEMBAUCHE i s not n u l l or SERVICE i s not n u l l )

) ;

62/193

Traduction des contraintes d’heritageDecomposition ascendante

→ Contrainte de totaliteContraintes d’heritage :

(Contrainte B) Il n’existe pas de personnel ni enseignant niBIATOS

(Contrainte C) Il peut exister un personnel a la fois enseignantet BIATOS

63/193

Traduction des contraintes d’heritageDecomposition ascendante

→ Contrainte de totalite

Contrainte B : voir ci-dessus

Contrainte C : Suppression ou desactiver la contrainte Aprecedente (DROP CONSTRAINT ouDISABLE CONSTRAINT)

DROP CONSTRAINT : en cas de reactivation de lacontrainte, il est necessaire de la recreer(ADD CONSTRAINT)DISABLE CONSTRAINT : en cas de reactivation de lacontrainte, il faut simplement la reactiver avec la requeteENABLE CONSTRAINT

64/193

Traduction des contraintes d’heritageDecomposition ascendante

→ Contrainte de totalite

REM La c o n t r a i n t e C r e v i e n t a f a i r e l aREM D e s a c t i v a t i o n de l a CONTRAINTE A

a l t e r t a b l e PERSONNELd i s a b l e c o n s t r a i n t CK CONTRAINTE A ;

65/193

Traduction des contraintes d’heritageDecomposition ascendante

→ Contrainte d’exclusion

Contrainte d’heritage :

Contrainte A→ Reactivation de la contrainte A en supprimantau prealable les tuples ne repondant pas a cette contrainte

Non-contrainte B → Desactivation de la contrainte B

66/193

Traduction des contraintes d’heritageDecomposition ascendante

→ Contrainte d’exclusion

REM ∗∗∗∗∗ R e a c t i v a t i o n de l a CONTRAINTE Aa l t e r t a b l e PERSONNEL

e n a b l e c o n s t r a i n t CK CONTRAINTE A ;

REM ∗∗∗∗∗ D e s a c t i v a t i o n de l a CONTRAINTE Ba l t e r t a b l e PERSONNEL

d i s a b l e c o n s t r a i n t CK CONTRAINTE B ;

67/193

Traduction des contraintes d’heritageDecomposition ascendante

→ Sans Contrainte

Aucune contrainte de type CHECK n’est a programmer !

68/193

Recursivite

Sous Oracle,

possibilite de representation et de manipulation

de donnees ayant une structure de donnees recursive (arbre)

par une representation tabulaire et avec la commande SQL :

SELECT . . . FROM . . .WHERE . . .CONNECT BY PRIOR c o l o n n e o p e r a t e u r c o l o n n e[CONNECT BY c o l o n n e o p e r a t e u r PRIOR c o l o n n e ]START WITH . . .LEVEL . . .

69/193

Exemples de parcours destructure de donnees de type recursif

Structures de donnees recursives de type ArbresExemples :

Arbre Genealogique

Nomenclature d’un produit (Compose, Composant)

Oracle offre la commande CONNECT BY

SELECT . . . FROM . . .WHERE . . .CONNECT BY PRIOR c o l o n n e o p e r a t e u r c o l o n n eCONNECT BY c o l o n n e o p e r a t e u r PRIOR c o l o n n e

START WITHLEVEL

70/193

Structures hierarchiques, arborescentesArbre Genealogique

Oracle permet la representation et la manipulation des donneesayant une structure arborescente par le modele relationnel

c r ea te t ab l e PERSONNES (NUMERO number ( 7 ) , NOM va rcha r ( 1 5 ) , PRENOM va rcha r ( 1 5 ) ,DATENAISSANCE date , SEXE char ( 1 ) , PERE number ( 7 ) , MERE number ( 7 ) ,c o n s t r a i n t PK PERSONNES pr imary key (NUMERO) ,c o n s t r a i n t FK PERSONNES PERE PERSONNES f o r e i g n key (PERE) r e f e r e n c e s PERSONNES,c o n s t r a i n t FK PERSONNES MERE PERSONNES f o r e i g n key (MERE) r e f e r e n c e s PERSONNES,c o n s t r a i n t CK SEXE PERSONNES check (SEXE i n ( ’M’ , ’ F ’ ) ) ) ;

71/193

Exemple de requete recursive

Recherche des ancetres d’une personne

s e l e c t d i s t i n c t NUMERO, NOM, PRENOM,DATENAISSANCE from PERSONNES

connect by p r i o r PERE=NUMERO orp r i o r MERE=NUMERO

s t a r t w i t h NUMERO=&num ;

72/193

Conclusion / Bilan

Aucune des solutions ne constitue la panacee.

Il faut mesurer les performances des requetes.

Voir aussi le type de requetes

73/193

Transformation des associations d’heritage en SQL 3

Heritage de types

Existe depuis la version 9.1 d’Oracle (novembre 2001)Uniquement heritage de typePas d’heritage multiple

Un type peut heriter d’un seul autre type (sur-type)Un sur-type peut permettre de definir plusieurs sous-typesChaque sous-type est specialise par rapport au sur-type qui estdit plus general

Mecanisme d’heritage automatiquement repercute au niveaudes tables objet a par du moment ou les types definissant lestables sont issus eux-memes d’une hierarchie d’heritage

Heritage de tables ?

74/193

Heritage de types

Definition d’un personnel a l’Universite

−−− ∗∗∗ C r e a t i o n du t y p e de l a sur−c l a s s ec r ea te t y p e PERSONNEL TYPE AS OBJECT(

NUMERO number ( 7 ) ,NOM va rcha r ( 1 0 ) ,PRENOM va rcha r ( 1 0 ) ,DATENAISSANCE date ,SEXE char ( 1 )

)NOT FINAL /∗ peut i n c l u r e des s o u s c l a s s e s ∗//

75/193

Heritage de types

Definition d’un enseignant

−−− ∗∗∗ C r e a t i o n du t y p e de l a sous−c l a s s ec r ea te t y p e ENSEIGNANT TYPE UNDER PERSONNEL TYPE(

ECHELON number ( 2 ) ,INDICE number ( 5 ) ,SPECIALITE va rcha r ( 2 0 )

)FINAL/

76/193

Creation des tables objet et contraintes

Creation de tables objet en fonctions des types precedemmentdefinis

Aucune directive ne precise l’heritage : il est induit par lahierarchie de type existante

−−− ∗∗∗ P e r s o n n e l de l ’ u n i v e r s i t ec r ea te t ab l e PERSONNEL OF PERSONNEL TYPE(

c o n s t r a i n t PK PERSONNEL pr imary key (NUMERO) ,c o n s t r a i n t CK SEXE PERSONNEL check (SEXE i n ( ’M’ , ’ F ’ ) )

) ;−−− ∗∗∗ P e r s o n n e l e n s e i g n a n tc r ea te t ab l e ENSEIGNANT OF ENSEIGNANT TYPE ;

IMPORTANT : les contraintes ne sont definies que dans la tablepersonnel

77/193

Creation des tables objet et contraintesIllustration

NB : Les contraintes ne sont definies que dans la table personnel

→ On herite d’un type

Insertion des donnees dans la table personnel :

i n s e r t i n t o p e r s o n n e l va l u e s ( 1 , ’B ’ , ’ F ’ , ’ 17−09−2004 ’ , ’M’ ) ;i n s e r t i n t o p e r s o n n e l va l u e s ( 1 , ’B ’ , ’ F ’ , ’ 17−09−2004 ’ , ’M’ ) ;∗ERREUR a l a l i g n e 1 :

ORA−00001: v i o l a t i o n de c o n t r a i n t e unique (FB . PK PERSONNEL)

s e l e c t ∗ from p e r s o n n e l ;NUMERO NOM PRENOM DATENAISSA S−−−−−−−−−− −−−−−−−−−− −−−−−−−−−− −−−−−−−−−− −

1 B F 17−09−2004 M

78/193

Creation des tables objet et contraintesIllustration

NB : Les contraintes ne sont definies que dans la table personnel

→ On herite d’un type

Insertion des donnees dans la table enseignant :

i n s e r t i n t o e n s e i g n a n t va l u e s ( 7 , ’B ’ , ’ F ’ , ’ 17−09−2004 ’ , ’M’ , 2 , 780 , ’BD ’ ) ; 1 l i g n e c r e e e .i n s e r t i n t o e n s e i g n a n t va l u e s ( 7 , ’B ’ , ’ F ’ , ’ 17−09−2004 ’ , ’M’ , 2 , 780 , ’BD ’ ) ; 1 l i g n e c r e e e . ! ! !i n s e r t i n t o e n s e i g n a n t va l u e s ( 8 , ’B ’ , ’D ’ , ’ 17−10−2004 ’ , ’M’ , 2 , 780 , ’BD ’ ) ; 1 l i g n e c r e e e .

s e l e c t ∗ from e n s e i g n a n t ;

NUMERO NOM PRENO DATENAISSA S ECHELON INDICE SPECIALITE−−−−−−−−−−−−−−−−−−−−−−−−−− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

7 B F 17−09−2004 M 2 780 BD7 B F 17−09−2004 M 2 780 BD8 B D 17−10−2004 M 2 780 BD

79/193

Creation des tables objet et contraintes (2)

Ci-dessous :

Creation des tables objet en fonctions des typesprecedemment definis

Definition des contraintes au niveau des tables

−−− ∗∗∗ P e r s o n n e l de l ’ u n i v e r s i t ec r ea te t ab l e PERSONNEL OF PERSONNEL TYPE(

c o n s t r a i n t PK PERSONNEL pr imary key (NUMERO) ,c o n s t r a i n t CK SEXE PERSONNEL check (SEXE i n ( ’M’ , ’ F ’ ) )

) ;−−− ∗∗∗ P e r s o n n e l e n s e i g n a n t

80/193

Transformation des associations d’heritage en SQL 3

c r ea te t ab l e ENSEIGNANT OF ENSEIGNANT TYPE(

c o n s t r a i n t PK ENSEIGNANT pr imary key (NUMERO) ,c o n s t r a i n t CK SEXE ENSEIGNANT check (SEXE i n ( ’M’ , ’ F ’ ) )

) ;

ATTENTION :

Definition des contraintes, aussi dans la table enseignant

Heritage d’un type

81/193

Creation des tables objet et contraintes (2)illustrations

Les contraintes doivent etre definies aussi dans la tableenseignant : heritage d’un type

SQL> i n s e r t i n t o e n s e i g n a n t va l u e s ( 7 , ’B ’ , ’ F ’ , ’ 17−09−2004 ’ , ’M’ , 2 , 780 , ’BD ’ ) ; 1 l i g n e c r e e e .SQL> i n s e r t i n t o e n s e i g n a n t va l u e s ( 7 , ’B ’ , ’ F ’ , ’ 17−09−2004 ’ , ’M’ , 2 , 780 , ’BD ’ ) ;i n s e r t i n t o e n s e i g n a n t va l u e s ( 7 , ’B ’ , ’ F ’ , ’ 17−09−2004 ’ , ’M’ , 2 , 780 , ’BD ’ )∗ ERREUR a l a l i g n e 1 : ORA−00001: v i o l a t i o n de c o n t r a i n t e unique (FB . PK ENSEIGNANT)

SQL> i n s e r t i n t o e n s e i g n a n t va l u e s ( 8 , ’B ’ , ’D ’ , ’ 17−10−2004 ’ , ’M’ , 2 , 780 , ’BD ’ ) ; 1 l i g n e c r e e e .SQL> i n s e r t i n t o e n s e i g n a n t va l u e s ( 9 , ’B ’ , ’D ’ , ’ 17−10−2004 ’ , ’K ’ , 2 , 780 , ’BD ’ ) ;i n s e r t i n t o e n s e i g n a n t va l u e s ( 9 , ’B ’ , ’D ’ , ’ 17−10−2004 ’ , ’K ’ , 2 , 780 , ’BD ’ )∗ ERREUR a l a l i g n e 1 : ORA−02290: v i o l a t i o n de c o n t r a i n t e s (FB . CK SEXE ENSEIGNANT)

de v e r i f i c a t i o n

SQL> s e l e c t ∗ from e n s e i g n a n t ;NUMERO NOM PRENO DATENAISSA S ECHELON INDICE SPECIALITE−−−−−−−−−−−−−−−−−−−−−−−−−− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

7 B F 17−09−2004 M 2 780 BD8 B D 17−10−2004 M 2 780 BD

82/193

Transformation des associations d’heritage en SQL 3Heritage de tables : A venir

REM ∗∗∗ Un p e r s o n n e l a l ’ U n i v e r s i t ec r e a t e t a b l e PERSONNEL(

NUMERO number ( 7 ) , NOM v a r c h a r ( 1 0 ) ,PRENOM v a r c h a r ( 1 0 ) , DATENAISSANCE date ,SEXE c h a r ( 1 ) ,c o n s t r a i n t PK PERSONNEL p r i m a r y key (NUMERO) ,c o n s t r a i n t CK SEXE PERSONNEL check (SEXE i n ( ’M’ , ’ F ’ ) )

) ;

83/193

Transformation des associations d’heritage en SQL 3Heritage de tables : A venir

REM ∗∗∗ P e r s o n n e l e n s e i g n a n tc r ea te t ab l e ENSEIGNANT under PERSONNEL(

ECHELON number ( 2 ) ,INDICE number ( 5 ) ,SPECIALITE va rcha r ( 2 0 )

) ;

REM ∗∗∗ P e r s o n n e l b i a t o sc r ea te t ab l e BIATOS under PERSONNEL(

DATEEMBAUCHE date ,SERVICE va rcha r ( 2 0 )

) ;

84/193

Traduction des associations d’agregation

85/193

Traduction des associations d’agregationREM ∗∗∗ Un co−p r o p r i e t a i r e peut p o s s e d e r p l u s i e u r s immeublesc r ea te t ab l e COPROPRIETAIRE(

NUMCO number ( 7 ) ,NOMCO va rcha r ( 1 0 ) ,TELCO va rcha r ( 1 5 ) ,ADRCO va rcha r ( 5 0 ) ,c o n s t r a i n t PK COPROPRIETAIRE pr imary key (NUMCO)

) ;

REM ∗∗∗ Un immeuble d o i t e t r e p o s s e d e par un ouREM p l u s i e u r s c o p r o p r i e t a i r e sc r ea te t ab l e IMMEUBLE(

NUMIMM number ( 7 ) ,ADRIMM va rcha r ( 5 0 ) ,c o n s t r a i n t PK IMMEUBLE pr imary key (NUMIMM)

) ;

86/193

Traduction des associations d’agregation

c r ea te t ab l e DEPENSE(

NUMCO number ( 7 ) ,NUMIMM number ( 7 ) ,DATEDEP date ,MTTDEP number ( 1 0 , 2 ) ,LIBDEP va rcha r ( 5 0 ) ,c o n s t r a i n t PK DEPENSE pr imary key (NUMCO,NUMIMM) ,c o n s t r a i n t FK DEPENSE NUMCO COPROPR f o r e i g n key (NUMCO)

r e f e r e n c e s COPROPRIETAIRE(NUMCO) on de l e t e cascade ,c o n s t r a i n t FK DEPENSE NUMIMM IMMEUBLE f o r e i g n key (NUMIMM)

r e f e r e n c e s IMMEUBLE(NUMIMM ) on de l e t e cascade) ;

→ La cardinalite minimale de l’association depenser pourra etretestee par l’intermediaire d’une procedure PL/SQL

87/193

Traduction des contraintes d’integrite fonctionnelles

Contraintes : Partition, Exclusion, Totalite, Simultaneite, Inclusion...Toutes les contraintes peuvent etre definies ou programmees via :

la declaration de contraintes (constraints)

la programmation de

fonctions (functions)procedures (procedures)paquetages (packages)declencheurs (triggers)

en PL/SQL ou avec un langage hote tel que le C, C++, Java

88/193

Contrainte d’inclusion

c r ea te t ab l e STAGE(

NUMEROS number ( 7 ) ,NOMENTREPRISE va rcha r ( 4 0 ) ,TELENT va rcha r ( 1 5 ) ,ADRENT va rcha r ( 5 0 ) ,c o n s t r a i n t PK STAGE pr imary key (NUMEROS)

) ;

89/193

Contrainte d’inclusionUne table par classe

c r ea te t ab l e ETUDIANT(

NUMEROE number ( 7 ) ,NOM va rcha r ( 1 0 ) ,PRENOM va rcha r ( 1 0 ) ,DATENAISSANCE date ,SEXE char ( 1 ) ,NUMEROS number ( 7 ) ,c o n s t r a i n t PK ETUDIANT pr imary key (NUMEROE) ,c o n s t r a i n t FK ETUDIANT NUMEROS STAGE f o r e i g n key (NUMEROS)

r e f e r e n c e s STAGE(NUMEROS) ,c o n s t r a i n t CK ETUDIANT SEXE check (SEXE i n ( ’M’ , ’ F ’ ) )

) ;

90/193

Contrainte d’inclusion

c r ea te t ab l e VOEUX(

NUMEROE number ( 7 ) ,NUMEROS number ( 7 ) ,c o n s t r a i n t PK VOEUX pr imary key (NUMEROE,NUMEROS) ,c o n s t r a i n t FK VOEUX NUMEROE ETUDIANT f o r e i g n key (NUMEROE)

r e f e r e n c e s ETUDIANT (NUMEROE) ,c o n s t r a i n t FK VOEUX NUMEROS STAGE f o r e i g n key (NUMEROS)

r e f e r e n c e s STAGE(NUMEROS)) ;

a l t e r t a b l e ETUDIANT addc o n s t r a i n t FK EFFECTUER INCLUSION VOEUXf o r e i g n key (NUMEROE,NUMEROS)referencesVOEUX (NUMEROE,NUMEROS) ;

91/193

Contrainte d’inclusionContrainte d’inclusion : Le logiciel doit etre installe sur un serveurdu departement qui a achete le programme.

Un logiciel L achete par le departement D est installe sur unserveur S, destine entre autres, a ce departement

92/193

Contrainte d’inclusionUne table par Classe

c r ea te t ab l e DEPARTEMENT(

NUMDEP number ( 7 ) ,NOMDEP va rcha r ( 1 0 ) ,SPECIALITE va rcha r ( 2 0 ) ,c o n s t r a i n t PK DEPARTEMENT pr imary key (NUMDEP)

) ;

c r ea te t ab l e LOGICIEL(

NUMLOG number ( 7 ) ,NOMLOG va rcha r ( 1 0 ) ,VERSIONLOG va rcha r ( 1 0 ) ,c o n s t r a i n t PK LOGICIEL pr imary key (NUMLOG)

) ;

93/193

Contrainte d’inclusionUne table par Classe

c r ea te t ab l e SERVEUR(

NUMSERV number ( 7 ) ,NOMSERV va rcha r ( 1 0 ) ,TYPESERV va rcha r ( 1 0 ) ,c o n s t r a i n t PK SERVEUR pr imary key (NUMSERV)

) ;

94/193

Contrainte d’inclusionUne table par Association ou par Classe-Association

c r ea te t ab l e ACHETER (NUMDEP number ( 7 ) , NUMLOG number ( 7 ) , DATEACHAT date ,c o n s t r a i n t PK ACHETER pr imary key (NUMDEP,NUMLOG) ,c o n s t r a i n t FK ACHETER NUMDEP DEPARTEMENT

f o r e i g n key (NUMDEP) r e f e r e n c e s DEPARTEMENT(NUMDEP) ,c o n s t r a i n t FK ACHETER NUMLOG LOGICIEL

f o r e i g n key (NUMLOG) r e f e r e n c e s LOGICIEL (NUMLOG)) ;

c r ea te t ab l e UTILISER (NUMDEP number ( 7 ) , NUMSERV number ( 7 ) ,c o n s t r a i n t PK UTILISER pr imary key (NUMDEP,NUMSERV) ,c o n s t r a i n t FK UTILISER NUMDEP DEPARTEMENT

f o r e i g n key (NUMDEP) r e f e r e n c e s DEPARTEMENT(NUMDEP) ,c o n s t r a i n t FK UTILISER NUMSERV SERVEUR

f o r e i g n key (NUMSERV) r e f e r e n c e s SERVEUR(NUMSERV)) ;

95/193

Contrainte d’inclusionUne table par Association ou par Classe-Association

c r ea te t ab l e INSTALLER (NUMLOG number ( 7 ) , NUMSERV number ( 7 ) ,c o n s t r a i n t PK INSTALLER pr imary key (NUMLOG,NUMSERV) ,c o n s t r a i n t FK INSTALLER NUMLOG LOGICIEL

f o r e i g n key (NUMLOG) r e f e r e n c e s LOGICIEL (NUMLOG) ,c o n s t r a i n t FK INSTALLER NUMSERV SERVEUR

f o r e i g n key (NUMSERV) r e f e r e n c e s ERVEUR(NUMSERV) ) ;

96/193

Contrainte d’InclusionDeclencheur

Un logiciel L achete par le departement D est installe sur un serveur S, destine entre

autres, a ce departement

c r ea te or r e p l a c e t r i g g e r t r i g c o n t r a i n t e i n c l u s i o nb e f o r e i n s e r t on INSTALLERf o r each rowd e c l a r eLOGIC number ( 7 ) ;SERV number ( 7 ) ;b e g i n

s e l e c t ACHETER.NUMLOG, UTILISER .NUMSERV i n t o LOGIC , SERVfrom ACHETER, UTILISERwhere ACHETER.NUMDEP = UTILISER .NUMDEP and

ACHETER.NUMLOG = : new .NUMLOG andUTILISER .NUMSERV = : new .NUMSERV;

except i onwhen n o d a t a f o u n d thenr a i s e a p p l i c a t i o n e r r o r (−20100 ,

’ Le l o g i c i e l d o i t e t r e i n s t a l l e s u run s e r v e u r du d epar tement a c h e t e u r ’ ) ;

end ;/

97/193

Programmation Objet – SQL 3

Objet-relationnel – Objet

Passage UML → Objet / Objet relationnel

98/193

Schema relationnel / SQL2

Schema relationnel :

COURS ( NUM COURS, NOMC, NBHEURES, ANNEE )

PROFESSEURS ( NUM PROF, NOMP, SPECIALITE , DATE ENTREE ,DER PROM, SALAIRE BASE , SALAIRE ACTUEL

)

CHARGE( NUM PROF∗ , NUM COURS∗ )

99/193

Schema relationnel / SQL2SQL2 :c r ea te t ab l e COURS( NUM COURS NUMBER( 2 ) NOT NULL ,

NOMC VARCHAR( 2 0 ) NOT NULL ,NBHEURES NUMBER( 2 ) ,ANNE NUMBER( 1 ) ,c o n s t r a i n t PK COURS pr imary key (NUM COURS)

) ;

c r ea te t ab l e PROFESSEURS( NUM PROF NUMBER( 4 ) NOT NULL ,

NOMP VARCHAR2( 2 5 ) NOT NULL ,SPECIALITE VARCHAR2( 2 0 ) ,DATE ENTREE DATE,DER PROM DATE,SALAIRE BASE NUMBER,SALAIRE ACTUEL NUMBER,c o n s t r a i n t PK PROFESSEURS pr imary key (NUM PROF)

) ;

c r ea te t ab l e CHARGE( NUM PROF NUMBER( 4 ) NOT NULL ,

NUM COURS NUMBER( 4 ) NOT NULL ,c o n s t r a i n t PK CHARGE pr imary key (NUM COURS,

NUM PROF)) ;

100/193

Schema relationnel / SQL2

a l t e r t a b l e CHARGEadd c o n s t r a i n t FK CHARGE COURS

f o r e i g n key (NUM COURS)r e f e r e n c e s COURS (NUM COURS ) ;

a l t e r t a b l e CHARGEadd c o n s t r a i n t FK CHARGE PROFESSEUR

f o r e i g n key (NUM PROF)r e f e r e n c e s PROFESSEURS (NUM PROF ) ;

101/193

Schema relationnel-objet / SQL3

Schema relationnel-objet

COURS ( NUM COURS, NOMC, NBHEURES, ANNEE )

PROFESSEURS (NUM PROF, NOMP, SPECIALITE , DATE ENTREE ,DER PROM, SALAIRE BASE , SALAIRE ACTUEL ,EnsembleDe (COURS)

)

102/193

Schema relationnel-objet / SQL3SQL3 :c r ea te t y p e c o u r s t y p e as o b j e c t( num cours number ( 2 ) , nomc va rcha r2 ( 2 0 ) ,

n b h e u r e s number ( 2 ) , annee number ( 1 ) )/

c r ea te t y p e l e s c o u r s t y p e as t ab l e o f c o u r s t y p e/

c r ea te t y p e p r o f e s s e u r t y p e as o b j e c t( num prof number ( 4 ) , nom va rcha r2 ( 2 5 ) ,

s p e c i a l i t e va rcha r2 ( 2 0 ) , c o u r s l e s c o u r s t y p e . . . )/

c r ea te t ab l e p r o f e s s e u r o f p r o f e s s e u r t y p e( pr imary key ( num prof ) )n e s t e d t a b l e c o u r s s t o r e as tabemp/

103/193

Types ObjetType de donnees

Principaux type de donnees Oracle :

104/193

Types ObjetPersistance

Sous Oracle, 3 categories d’objets :

Objets colonne (column objects) : stockes en tant quecolonne structuree dans une table relationnelle ;Objets ligne (row objects) : stockes en tant que ligne d’unetable objet.

possedent un identificateur unique appele OID (ObjectIdentifier)peuvent etre indexes et partitionnes

Objets non persistants : non stockes

ni dans une colonne d’une table relationnelleni dans une ligne d’une table objet

Ces objets n’existent que durant l’execution d’un programmePL/SQL

105/193

Types Objet

Definition de chaque objet a partir d’un type decrivant

une structure de donnees se positionnant dans une hierarchied’heritagedes methodes

Utilisation d’un type :

Construire d’autres typesDefinir une ou plusieurs tables objetDefinir une colonne d’une table relationnelleConstruire des vues objet

106/193

Types ObjetCreation d’un type

Creation

CREATE [OR REPLACE TYPE] schema . nomType[AS OBJECT | UNDER schema . nomSurType ]

(REM ∗∗∗ d e f i n i t i o n de l a s t r u c t u r ec o l o n n e 1 type1 , c o l o n n e 2 type2 , . . . ,

REM ∗∗∗ d e f i n i t i o n du comportementmethode1 ( p a r a m e t r e s 1 ) , methode2 ( p a r a m e t r e s 2 ) . . .

)[ [NOT] INSTANTIABLE ]

REM ∗∗∗ p o s i t i o n n e m e n t dans l e graphe d ’ h e r i t a g e[ [ NOT] FINAL ]/

107/193

Creation d’un typeDirective FINAL

Directives FINAL et NOT FINAL : positionnement d’un typedans le graphe d’heritage

Directive NOT final : a appliquer aux types generiques

Par defaut, tout type est FINALUn type FINAL ne peut servir a definir des sous-types

108/193

Creation d’un typeDirective FINAL – Exemples

CREATE TYPE a d r e s s e t AS OBJECT (nrue NUMBER( 3 ) , r u e VARCHAR( 4 0 ) , v i l l e VARCHAR( 3 0 )

/

CREATE TYPE P e r s o n n e l t AS OBJECT(nom VARCHAR ( 1 0 ) , prenom VARCHAR( 1 0 ) , a d r e s s e a d r e s s e t ) )NOT FINAL

/

CREATE TYPE E n s e i g n a n t t UNDER P e r s o n n e l t (Eche lon NUMBER, i n d i c e NUMBER)FINAL

109/193

Creation d’un typeDirective INSTANTIABLE

Directives INSTANTIABLE et NOT INSTANTIABLE : capacited’instancitation d’un typeTous les types crees sont par defaut INSTANTIABLENOT INSTANTIABLE : similaire a la notion de classe abstraiteChaque type possede

un constructeur permettant de creer des objets (persistants ounon) a l’aide de la commande NEW ou au sein d’un commandeINSERT

un constructeur (par defaut) et plusieurs dans le cas desurcharge

Un type NOT INSTANTIABLE ne peut pas etre FINAL

Un sous-type NOT INSTANTIABLE peut heriter d’un typeINSTANTIABLE

110/193

Creation d’un typeDirective INSTANTIABLE -- Exemples

CREATE TYPE P e r s o n n e l t AS OBJECT(nom VARCHAR ( 1 0 ) , prenom VARCHAR( 1 0 ) , a d r e s s e a d r e s s e t ) )NOT INSTANTIABLE NOT FINAL

/

CREATE TYPE E n s e i g n a n t t UNDER P e r s o n n e l t (Eche lon NUMBER, i n d i c e NUMBER)INSTANTIABLE FINAL

/

111/193

Types ObjetSuppression d’un type

DROP TYPE nomType [ FORCE | VALIDATE ] ;

Directives :

FORCE : suppression du type meme s’il y a des objets de cetype dans une baseOracle marque les colonnes dependant de ce type, UNUSED, etelles deviennent inaccessibles (non recommande)

VALIDATE : Verification si les instances du type a supprimerpeuvent etre substitues par un sur-type.

Exemple :

DROP TYPE P e r s o n n e l t FORCE

112/193

Types ObjetCreation d’un type

Specification de l’objetCREATE TYPE Bank Account AS OBJECT (

acct number INTEGER ( 5 ) ,b a l a n c e REAL ,s t a t u s VARCHAR2( 1 0 ) ,

MEMBER PROCEDURE open( amount IN REAL ) ,

MEMBER PROCEDURE v e r i f y a c c t(num IN INTEGER ) ,

MEMBER PROCEDURE c l o s e(num IN INTEGER , amount OUT REAL)

) ;

CREATE TYPE BODY Bank Account AS. . .

END ;

113/193

Types ObjetCreation d’un type

Definition des methodes associees a l’objet

CREATE TYPE BODY Bank Account AS

MEMBER PROCEDURE open ( amount IN REAL) I SBEGIN −− open account w i t h i n i t i a l d e p o s i t

IF NOT amount > 0 THENRAISE APPLICATION ERROR(−20104 , ’ bad amount ’ ) ;

END IF ;−− SELECT a c c t s e q u e n c e . NEXTVAL INTO acct number FROM d u a l ;s t a t u s := ’ open ’ ;b a l a n c e := amount ;

END open ;

114/193

Types ObjetCreation d’un type

MEMBER PROCEDURE v e r i f y a c c t (num IN INTEGER) I SBEGIN −− check f o r wrong account number o r c l o s e d account

IF (num <> acct number ) THENRAISE APPLICATION ERROR(−20105 , ’ wrong number ’ ) ;

ELSIF ( s t a t u s = ’ c l o s e d ’ ) THENRAISE APPLICATION ERROR(−20106 , ’ account c l o s e d ’ ) ;

END IF ;END v e r i f y a c c t ;

MEMBER PROCEDURE c l o s e (num IN INTEGER , amount OUT REAL) I SBEGIN −− c l o s e account and r e t u r n b a l a n c e

v e r i f y a c c t (num ) ;s t a t u s := ’ c l o s e d ’ ;amount := b a l a n c e ;

END c l o s e ;END ;

115/193

Types ObjetExtraction de la description d’un type

Definition de nouvelles vues du DD pour prendre en compte lestypesExemple :

c r ea te t y p e emp type as o b j e c t ( n i n s e e va rcha r2 ( 1 3 ) ,age number , nom va rcha r2 ( 3 0 ) )

/

Description de la structure du 1er niveau d’un type :

SQL> DESC emp type

116/193

Types ObjetExtraction de la description d’un type

Exemples de vues : (USER_..., DBA_..., ALL_...)

Description :

des collections : USER_COLL_TYPES

des index sur les types : USER_INDEXTYPES

des types d’une maniere generale : USER_TYPES

des attributs des types : USER_TYPE_ATTRS

des methodes des types : USER_TYPE_METHODS

des versions des types : USER_TYPE_VERSIONS

117/193

Passage a l’objetTables relationnelles

−− Table : MAGASINS2 SQL2c r ea te t ab l e MAGASINS2( NUMMAG INTEGER ,

NOMMAG CHAR( 3 0 ) ,TELMAG CHAR( 1 5 ) ,ADRNUMMAG VARCHAR2( 1 0 ) ,ADRRUEMAG VARCHAR2( 5 0 ) ,ADRCPMAG VARCHAR2( 1 0 ) ,ADRVILLEMAG VARCHAR2( 5 0 ) ,ADRPAYSMAG VARCHAR2( 5 0 ) ,c o n s t r a i n t PK MAGASINS2

pr imary key (NUMMAG) ) ;

−− Table : CLIENTS2 SQL2c r ea te t ab l e CLIENTS2( NUMCLI INTEGER ,

NOMCLI CHAR( 2 0 ) ,TELCLI CHAR( 1 5 ) ,ADRNUMCLI VARCHAR2( 1 0 ) ,ADRRUECLI VARCHAR2( 5 0 ) ,ADRCPCLI VARCHAR2( 1 0 ) ,ADRVILLECLI VARCHAR2( 5 0 ) ,ADRPAYSCLI VARCHAR2( 5 0 ) ,c o n s t r a i n t PK CLIENTS2

pr imary key (NUMCLI ) ) ;

i n s e r t i n t o MAGASINS2 va l u e s ( 1 , ’FB ’ , ’ 0145454545 ’ , ’ 13 ’ , ’ Avenue de l a p a i x ’ ,’ 75015 ’ , ’ P a r i s ’ , ’ France ’ ) ;

NUMMAG NOMMAG TELMAG ADRNU ADRRUEMAG ADRCP ADRVILLEMA ADRPAYSMAG1 FB 0145454545 13 Avenue de l a p a i x 75015 P a r i s France2 FB 0155555555 20 Avenue de l a l i b e r t e 06100 Nice France3 FB 0155555555 10 Avenue des Amis 6050 B r u x e l l e s B e l g i q u e4 FB 71226002 10 Avenue du s o l e i l 1001 Tunis T u n i s i e

NUMCLI NOMCLI TELCLI ADRNU ADRRUECLI ADRCP ADRVILLECL ADRPAYSCLI1 TRAIFOR 0645454545 13 Avenue de l a p a i x 75015 P a r i s France2 CLEMENT 0607080910 17 Avenue de l a p a i x 75015 P a r i s France3 SOUCY 98980307 77 Route de l a c o r n i c h e 4001 Sousse T u n i s i e

118/193

Tables ObjetCreation d’un type – TAD

Premiere extension du modele relationnel : Types Abstraits de Donnees(TAD)TAD (contexte BD) :

Nouveau type d’attribut defini par l’utilisateur

Enrichissement de la collection existante de types disponibles par defaut(number, date, char, varchar ...)

Structure de donnees partagee

Utilisation du type dans une ou plusieurs tablesParticipation a la composition d’un ou plusieurs autres types

Remarques :

Un TAD inclut des methodes qui sont des procedures ou des fonctions

Elles permettent de manipuler les objets du type abstrait

119/193

Tables ObjetCreation d’un type – exemple de TAD

c r ea te t y p e ADRESSE TYPE as o b j e c t( ADRNUM VARCHAR2( 1 0 ) ,

ADRRUE VARCHAR2( 5 0 ) ,ADRCP VARCHAR2( 1 0 ) ,ADRVILLE VARCHAR2( 5 0 ) ,ADRPAYS VARCHAR2( 5 0 ) )

/

c r ea te t y p e MAG TYPE as o b j e c t( NUMMAG INTEGER ,

NOMMAG CHAR( 3 0 ) ,TELMAG CHAR( 1 5 ) ,ADRMAG ADRESSE TYPE )

/

c r ea te t y p e CLI TYPE as o b j e c t( NUMCLI INTEGER ,

NOMCLI CHAR( 3 0 ) ,TELCLI CHAR( 1 5 ) ,ADRCLI ADRESSE TYPE )

/

120/193

Tables ObjetCreation d’une table – Exemples

create tab l e MAGASINS3 OF MAG TYPE( con s t r a i n t PK MAGASINS3 primary key (NUMMAG) ) ;

create tab l e CLIENTS3 OF CLI TYPE( con s t r a i n t PK CLIENTS3 primary key (NUMCLI) ) ;

121/193

Tables ObjetCreation d’un type

Remarques :

Un type ne peut pas contenir de contraintes (NOT NULL,CHECK, UNIQUE, DEFAULT, PRIMARY KEY, FOREIGN KEY, etc.).

Les contraintes doivent etre declarees au niveau de la tableobjet

Acces a la description des types a partir du Dictionnaire deDonnees :

SQL > s e l e c t tab le name , o b j e c t i d t y p e , t a b l e t y p e o w n e r ,t a b l e t y p e from u s e r o b j e c t t a b l e s ;

122/193

Tables ObjetCreation/description d’une table Exemples

SQL> desc c l i e n t s 2Nom NULL ? Type−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− −−−−−−−− −−−−−−−−−−−−−−−−−−−−−NUMCLI NOT NULL NUMBER( 3 8 )NOMCLI CHAR( 2 0 )TELCLI CHAR( 1 5 )ADRNUMCLI VARCHAR2( 1 0 )ADRRUECLI VARCHAR2( 5 0 )ADRCPCLI VARCHAR2( 1 0 )ADRVILLECLI VARCHAR2( 5 0 )ADRPAYSCLI VARCHAR2( 5 0 )

SQL> desc c l i e n t s 3Nom NULL ? Type−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− −−−−−−−− −−−−−−−−−−−−−−−−−−−−−NUMCLI NOT NULL NUMBER( 3 8 )NOMCLI CHAR( 3 0 )TELCLI CHAR( 1 5 )ADRCLI ADRESSE TYPE

123/193

Tables ObjetObject identifier (OID)

OID bases sur la cle primaire : Utilisation de l’option primarykeyc r ea te t ab l e CLIENTS3 OF CLI TYPE

( c o n s t r a i n t PK CLIENTS3 pr imary key (NUMCLI) )o b j e c t i d e n t i f i e r i s pr imary key ;

Index sur OID :c r ea te t ab l e CLIENTS3 OF CLI TYPE

( c o n s t r a i n t PK CLIENTS3 pr imary key (NUMCLI) )o b j e c t i d e n t i f i e r i s system g e n e r a t e d OIDINDEX n d x c l i e n t s 3 ;

c r ea te t ab l e CLIENTS3 OF CLI TYPE( c o n s t r a i n t PK CLIENTS3 pr imary key (NUMCLI) )o b j e c t i d e n t i f i e r i s system g e n e r a t e dOIDINDEX n d x c l i e n t s 3 ( s t o r a g e ( i n i t i a l 100K next 50 k

m i n e x t e n t s 1 maxextents 50)) ;

124/193

Tables ObjetInstanciation - exemples

Insertion d’une � ligne � (ou plutot d’un objet) :

i n s e r t i n t o MAGASINS3 va l u e s (MAG TYPE( 1 , ’FB ’ , ’ 0145454545 ’ ,ADRESSE TYPE( ’ 13 ’ , ’ Avenue de l a p a i x ’ , ’ 75015 ’ , ’ P a r i s ’ , ’ France ’ ) ) ) ;

i n s e r t i n t o MAGASINS3 va l u e s (MAG TYPE( 2 , ’FB ’ , ’ 0155555555 ’ ,ADRESSE TYPE( ’ 20 ’ , ’ Avenue de l a l i b e r t e ’ , ’ 06100 ’ , ’ N ice ’ , ’ France ’ ) ) ) ;

i n s e r t i n t o MAGASINS3 va l u e s (MAG TYPE( 3 , ’FB ’ , ’ 0155555555 ’ ,ADRESSE TYPE( ’ 10 ’ , ’ Avenue des Amis ’ , ’ 6050 ’ , ’ B r u x e l l e s ’ , ’ B e l g i q u e ’ ) ) ) ;

i n s e r t i n t o MAGASINS3 va l u e s (MAG TYPE( 4 , ’FB ’ , ’ 71226002 ’ ,ADRESSE TYPE( ’ 10 ’ , ’ Avenue du s o l e i l ’ , ’ 1001 ’ , ’ Tunis ’ , ’ T u n i s i e ’ ) ) ) ;

SQL> s e l e c t ∗ from magas ins3 ;NUMMAG NOMMAG TELMAG ADRMAG(ADRNUM, ADRRUE, ADRCP, ADRVILLE , ADRPAYS)

1 FB 0145454545 ADRESSE TYPE( ’ 13 ’ , ’ Avenue de l a p a i x ’ ,’ 75015 ’ , ’ P a r i s ’ , ’ France ’ )

2 FB 0155555555 ADRESSE TYPE( ’ 20 ’ , ’ Avenue de l a l i b e r t e ’ ,’ 06100 ’ , ’ N ice ’ , ’ France ’ )

3 FB 0155555555 ADRESSE TYPE( ’ 10 ’ , ’ Avenue des Amis ’ ,’ 6050 ’ , ’ B r u x e l l e s ’ , ’ B e l g i q u e ’ )

4 FB 71226002 ADRESSE TYPE( ’ 10 ’ , ’ Avenue du s o l e i l ’ ,’ 1001 ’ , ’ Tunis ’ , ’ T u n i s i e ’ )

125/193

Tables ObjetInstanciation - exemples

i n s e r t i n t o CLIENTS3 va l u e s ( CLI TYPE ( 1 , ’TRAIFOR ’ , ’ 0645454545 ’ ,ADRESSE TYPE( ’ 13 ’ , ’ Avenue de l a p a i x ’ , ’ 75015 ’ , ’ P a r i s ’ , ’ France ’ ) ) ) ;

i n s e r t i n t o CLIENTS3 va l u e s ( CLI TYPE ( 2 , ’CLEMENT ’ , ’ 0607080910 ’ ,ADRESSE TYPE( ’ 17 ’ , ’ Avenue de l a p a i x ’ , ’ 75015 ’ , ’ P a r i s ’ , ’ France ’ ) ) ) ;

i n s e r t i n t o CLIENTS3 va l u e s ( CLI TYPE ( 3 , ’SOUCY ’ , ’ 98980307 ’ ,ADRESSE TYPE( ’ 77 ’ , ’ Route de l a c o r n i c h e ’ , ’ 4001 ’ , ’ Sousse ’ , ’ T u n i s i e ’ ) ) ) ;

SQL> Se l e c t ∗ from c l i e n t s 3 ;NUMCLI NOMCLI TELCLI ADRCLI (ADRNUM, ADRRUE, ADRCP, ADRVILLE , ADRPAYS)

1 TRAIFOR 0645454545 ADRESSE TYPE( ’ 13 ’ , ’ Avenue de l a p a i x ’ , ’ 75015 ’ ,’ P a r i s ’ , ’ France ’ )

2 CLEMENT 0607080910 ADRESSE TYPE( ’ 17 ’ , ’ Avenue de l a p a i x ’ , ’ 75015 ’ ,’ P a r i s ’ , ’ France ’ )

3 SOUCY 98980307 ADRESSE TYPE( ’ 77 ’ , ’ Route de l a c o r n i c h e ’ , ’ 4001 ’ ,’ Sousse ’ , ’ T u n i s i e ’ )

126/193

Tables ObjetInstanciation

Table objet-relationnelle :

Table dependante d’un type

Enregistrements (lignes) dans cette table consideres commedes objets car ils possedent tous un OID (Object Identifier)unique

SQL> SELECT ∗ FROM c l i e n t s 3 ;NUMCLI NOMCLI TELCLI ADRCLI (ADRNUM, ADRRUE, ADRCP, ADRVILLE , ADRPAYS)

1 TRAIFOR 0645454545 ADRESSE TYPE( ’ 13 ’ , ’ Avenue de l a p a i x ’ , ’ 75015 ’ ,’ P a r i s ’ , ’ France ’ )

2 CLEMENT 0607080910 ADRESSE TYPE( ’ 17 ’ , ’ Avenue de l a p a i x ’ , ’ 75015 ’ ,’ P a r i s ’ , ’ France ’ )

3 SOUCY 98980307 ADRESSE TYPE( ’ 77 ’ , ’ Route de l a c o r n i c h e ’ , ’ 4001 ’ ,’ Sousse ’ , ’ T u n i s i e ’ )

127/193

Tables ObjetInstanciation

Renvoi des OID des objets de la table :

SQL> SELECT REF( c ) FROM c l i e n t s 3 c ;

REF(C)−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−0000280209 E9E229206EDF47DF9996946C4BBD571C4EB9AF259F2F42BC813E18E51603C0D40240014600000000280209550141 E8898C4859AF0F3D48FA3041944EB9AF259F2F42BC813E18E51603C0D40240014600010000280209 C2C96804847047F6856499690AAC9E254EB9AF259F2F42BC813E18E51603C0D4024001460002

128/193

Tables ObjetMises a jour

Modifications/Suppressions de �lignes� ou d’objets

Mise a jour d’une colonne standard

update c l i e n t s 3s e t NOMCLI = ’CBON ’ where NUMCLI=2;

Modification d’une colonne appartenant a un type imbrique

update c l i e n t s 3 cs e t c . ADRCLI . ADRVILLE = ’MAVILLE ’ where c . NUMCLI=2;

Suppression d’objet

de l e t e from c l i e n t s 3where n u m c l i = 3 ;

de l e t e from c l i e n t s 3 cwhere upper ( c . ADRCLI .ADRPAYS) = ’FRANCE ’ ;

129/193

Tables ObjetInterrogations

Utilisation de colonnes standards

s e l e c t numcl i , n o m c l i from c l i e n t s 3 ;NUMCLI NOMCLI

−−−−−−−−−− −−−−−−−−−−1 TRAIFOR2 CLEMENT3 SOUCY

Utilisation d’une colonne appartenant a un type imbrique

s e l e c t numcl i , nomcl i , c . ADRCLI .ADRPAYSfrom c l i e n t s 3 c ;

NUMCLI NOMCLI ADRCLI .ADRPAYS−−−−−−−−−− −−−−−−−−−− −−−−−−−−−−−−−−−−−−

1 TRAIFOR France2 CLEMENT France3 SOUCY T u n i s i e

130/193

Tables ObjetInterrogations

avec formatage

c o l nom format A10c o l l o c fo rmat A15s e l e c t n u m c l i as c l i , n o m c l i as nom ,

c . ADRCLI . ADRVILLE | | ’ ’ | | c . ADRCLI .ADRPAYS as l o cfrom c l i e n t s 3 c ;

CLI NOM LOC−−−−−−−−−− −−−−−−−−−− −−−−−−−−−−−−−−−

1 TRAIFOR P a r i s France2 CLEMENT P a r i s France3 SOUCY Sousse T u n i s i e

131/193

Tables ObjetInterrogations

avec contraintes

SQL> c o l c . ADRCLI .ADRPAYS format A10SQL> c o l c . ADRCLI . ADRVILLE format A10SQL> s e l e c t numcl i , nomcl i , c . ADRCLI . ADRPAYS,

2 c . ADRCLI . ADRVILLE from c l i e n t s 3 c3 WHERE upper ( c . ADRCLI . ADRVILLE ) l i k e ’P%’ ;

NUMCLI NOMCLI ADRCLI .ADRPAYS ADRCLI . ADRVILLE−−−−−−−−−− −−−−−−−−−− −−−−−−−−−−−−−−− −−−−−−−−−−−−−−−

1 TRAIFOR France P a r i s2 CLEMENT France P a r i s

132/193

Tables imbriquees(NESTED TABLE)

Table imbriquee (NESTED TABLE) : collection non ordonnee et nonlimitee d’elements de meme typeExemple : table Departement

NumDep Budget EmployesNInsee Nom Age

1 table contenant une colonne (table) :Association du type 1-N

??? 1 ou plusieurs tables : Association du type N-N

133/193

Tables imbriquees (NESTED TABLE)Creation

c r ea te t y p e emp type as o b j e c t( n i n s e e va rcha r2 ( 1 3 ) , age number , nom va rcha r2 ( 3 0 ) )

/

c r ea te t y p e emps type as t ab l e o f emp type/c r ea te t y p e d e p a r t e m e n t t y p e as o b j e c t

( numdep va rcha r2 ( 1 1 ) , budget number ,employes emps type )

/c r ea te t ab l e departement o f d e p a r t e m e n t t y p e

( pr imary key ( numdep ) )n e s t e d t a b l e employes s t o r e as tabemp

/

clause NESTED TABLE : definition d’une table imbriqueeclause STORE AS : nommage de la structure interne qui stocke les�enregistrements� de cette table imbriquee

134/193

Tables imbriquees (NESTED TABLE)Exemple

c r ea te t y p e emp type as o b j e c t ( n i n s e e va rcha r2 ( 1 3 ) ,age number , nom va rcha r2 ( 3 0 ) )

/c r ea te t y p e emps type as t ab l e o f emp type/c r ea te t y p e d e p a r t e m e n t t y p e as o b j e c t ( numdep va rcha r2 ( 1 1 ) ,

budget number , employes emps type )/c r ea te t ab l e departement o f d e p a r t e m e n t t y p e

( pr imary key ( numdep ) )n e s t e d t a b l e employes s t o r e as tabemp

/

135/193

Tables imbriquees (NESTED TABLE)Exemple

SQL> desc departementNom NULL ? Type−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−NUMDEP NOT NULL VARCHAR2( 1 1 )BUDGET NUMBEREMPLOYES EMPS TYPE

SQL> desc emps typeemps type TABLE OF EMP TYPENom NULL ? Type−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−NINSEE VARCHAR2( 1 3 )AGE NUMBERNOM VARCHAR2( 3 0 )

136/193

Tables imbriquees (NESTED TABLE)Insertion

Insertion des donnees dans une table imbriquee

i n s e r t i n t o departement va l u e s ( ’D1 ’ , 100000 , emps type ( ) ) ;i n s e r t i n t o departement va l u e s ( ’D2 ’ , 200000 , emps type ( ) ) ;

SQL> s e l e c t ∗ from departement ;NUMDEP BUDGET EMPLOYES( NINSEE , AGE, NOM)−−−−−−−−−−− −−−−−−−−−− −−−−−−−−−−−−−−−−−−−−−−−−−−D1 100000 EMPS TYPE( )D2 200000 EMPS TYPE( )

137/193

Tables imbriquees (NESTED TABLE)Insertion

Attention : dans l’exemple suivant, la table vide est noninitialisee

i n s e r t i n t o departement ( numdep , budget )va l u e s ( ’D3 ’ , 3 0 0 0 0 0 ) ;

SQL> s e l e c t ∗ from departement ;NUMDEP BUDGET EMPLOYES( NINSEE , AGE, NOM)−−−−−−−−−−− −−−−−−−−−− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−D1 100000 EMPS TYPE( )D2 200000 EMPS TYPE( )D3 300000

138/193

Tables imbriquees (NESTED TABLE)Insertion

Insertion des donnees dans une table imbriquee

i n s e r t i n t o departement va l u e s ( ’D4 ’ , 400000 ,emps type ( emp type ( ’N5 ’ , 25 , ’ B i b i ’ ) ,

emp type ( ’N6 ’ , 26 , ’ C i c i ’ ) ,emp type ( ’N7 ’ , 27 , ’ D i d i ’ ) ,emp type ( ’N8 ’ , 28 , ’ F i f i ’ ) ) ) ;

139/193

Tables imbriquees (NESTED TABLE)Insertion

SQL> s e l e c t ∗ from departement ;NUMDEP BUDGET EMPLOYES( NINSEE , AGE, NOM)−−−−−−−−−−− −−−−−−−−−− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−D1 100000 EMPS TYPE( )D2 200000 EMPS TYPE( )D3 300000D4 400000 EMPS TYPE(EMP TYPE( ’N5 ’ , 25 , ’ B i b i ’ ) ,

EMP TYPE( ’N6 ’ , 26 , ’ C i c i ’ ) ,EMP TYPE( ’N7 ’ , 27 , ’ D i d i ’ ) ,EMP TYPE( ’N8 ’ , 28 , ’ F i f i ’ ) )

Remarque : Commande INSERT avec les constructeurs des typesde la NESTED TABLE

stocke un objet dans la tableinitialise la table imbriquee associee avec des enregistrements

140/193

Tables imbriquees (NESTED TABLE)Insertion

Insertion des donnees dans une table imbriqueei n s e r t i n t o departement va l u e s ( ’D5 ’ , 400000 ,

emps type ( emp type ( ’N5 ’ , 25 , ’ B i b i ’ ) ,emp type ( ’N8 ’ , 28 , ’ F i f i ’ ) ) ) ;

SQL> s e l e c t ∗ from departement ;NUMDEP BUDGET EMPLOYES( NINSEE , AGE, NOM)−−−−−−−−−−− −−−−−−−−−− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−D1 100000 EMPS TYPE( )D2 200000 EMPS TYPE( )D3 300000D4 400000 EMPS TYPE(EMP TYPE( ’N5 ’ , 25 , ’ B i b i ’ ) ,

EMP TYPE( ’N6 ’ , 26 , ’ C i c i ’ ) ,EMP TYPE( ’N7 ’ , 27 , ’ D i d i ’ ) ,EMP TYPE( ’N8 ’ , 28 , ’ F i f i ’ ) )

D5 400000 EMPS TYPE(EMP TYPE( ’N5 ’ , 25 , ’ B i b i ’ ) ,EMP TYPE( ’N8 ’ , 28 , ’ F i f i ’ ) )

141/193

Tables imbriquees (NESTED TABLE)Insertion avec l’operateur TABLE

Insertion avec l’operateur TABLE dans une table imbriquee(D1 et D2 etaient initialises a vides)

i n s e r t i n t o TABLE ( s e l e c t d . employes from departement dwhere d . numdep = ’D1 ’ )

va l u e s ( ’N1 ’ , 21 , ’CLEMENT ’ ) ;i n s e r t i n t o TABLE ( s e l e c t d . employes from departement d

where d . numdep = ’D2 ’ )va l u e s ( ’N2 ’ , 22 , ’CLEMENTINE ’ ) ;

NB : l’operateur THE est obsolete et a ete remplace par l’operateurTABLE

142/193

Tables imbriquees (NESTED TABLE)Insertion avec l’operateur TABLE

SQL> s e l e c t ∗ from departement ;NUMDEP BUDGET EMPLOYES( NINSEE , AGE, NOM)−−−−−−−− −−−−−−−−−− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−D1 100000 EMPS TYPE(EMP TYPE( ’N1 ’ , 21 , ’CLEMENT ’ ) )D2 200000 EMPS TYPE(EMP TYPE( ’N2 ’ , 22 , ’CLEMENTINE ’ ) )D3 300000D4 400000 EMPS TYPE(EMP TYPE( ’N5 ’ , 25 , ’ B i b i ’ ) ,

EMP TYPE( ’N6 ’ , 26 , ’ C i c i ’ ) ,EMP TYPE( ’N7 ’ , 27 , ’ D i d i ’ ) ,EMP TYPE( ’N8 ’ , 28 , ’ F i f i ’ ) )

Remarques :

Commande INSERT INTO TABLE (SELECT ...) : stockage d’unenregistrement dans la table imbriquee designee par TABLE

SELECT apres le TABLE : Retourne un seul objet, ce qui permet deselectionner la table imbriquee associee

143/193

Tables imbriquees (NESTED TABLE)Insertion avec l’operateur TABLE

Insertion avec l’operateur TABLE dans une table imbriquee

(D3 n’etait pas initialise a vide)Insertion d’un employe dans le departement D3alors que celui-ci n’a pas ete initialise

i n s e r t i n t o TABLE ( s e l e c t d . employes from departement dwhere d . numdep = ’D3 ’ )va l u e s ( ’N3 ’ , 23 , ’NE MARCHE PAS ’ ) ;

144/193

Tables imbriquees (NESTED TABLE)Insertion avec l’operateur TABLE

SQL> i n s e r t i n t o t ab l e ( s e l e c t d . employes from departement d2 where d . numdep = ’D3 ’ ) va l u e s ( ’N3 ’ , 23 , ’NEMARCHEPAS ’ ) ;

i n s e r t i n t o t ab l e ( s e l e c t d . employes from departement dwhere d . numdep = ’D3 ’ )

∗ERREUR a l a l i g n e 1 :ORA−22908: r e f e r e n c e a une v a l e u r de t a b l e NULL

Explications :

1 Le departement D3 est bien un objet de la table Departement

2 mais il ne possede pas de table imbriquee

3 car celle-ci n’a pas ete creee lors de l’insertion.

Il faut detruire l’objet D3 puis le recreer !

145/193

Tables imbriquees (NESTED TABLE)Modification

Mise a jour de la table principaleupdate departement d

s e t d . budget = d . budget ∗ 1 . 5where d . budget <= 200000 ;

SQL> s e l e c t ∗ from departement ;NUMDEP BUDGET EMPLOYES( NINSEE , AGE, NOM)−−−−−−−− −−−−−−−− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−D1 150000 EMPS TYPE(EMP TYPE( ’N1 ’ , 21 , ’CLEMENT ’ ) )D2 300000 EMPS TYPE(EMP TYPE( ’N2 ’ , 22 , ’CLEMENTINE ’ ) )D3 300000D4 400000 EMPS TYPE(EMP TYPE( ’N5 ’ , 25 , ’ B i b i ’ ) ,

EMP TYPE( ’N6 ’ , 26 , ’ C i c i ’ ) ,EMP TYPE( ’N7 ’ , 27 , ’ D i d i ’ ) ,EMP TYPE( ’N8 ’ , 28 , ’ F i f i ’ ) )

D5 400000 EMPS TYPE(EMP TYPE( ’N5 ’ , 25 , ’ B i b i ’ ) ,EMP TYPE( ’N8 ’ , 28 , ’ F i f i ’ ) )

146/193

Tables imbriquees (NESTED TABLE)Modification (suite)

Mise a jour de la table principale selon un predicat dans latable imbriqueeupdate departement d s e t d . budget = d . budget + 777

where e x i s t s ( s e l e c t ∗ fromtab l e ( s e l e c t dt . employes from departement dt

where dt . numdep =d . numdep ) nt

where nt . age < 25 ) ;

Description :

Requete qui retourne les employes de chaque departement

s e l e c t dt . employes from departement dtwhere dt . numdep = d . numdep

Condition sur un attribut de la table imbriquee :

where nt . age < 25

Alias de la table imbriquee : nt

147/193

Tables imbriquees (NESTED TABLE)Modification (suite)

Mise a jour de la table principale selon un predicat dans latable imbriquee

148/193

Tables imbriquees (NESTED TABLE)Modification (suite)

SQL> s e l e c t ∗ from departement ;NUMDEP BUDGET EMPLOYES( NINSEE , AGE, NOM)−−−−−−− −−−−−−− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−D1 150777 EMPS TYPE(EMP TYPE( ’N1 ’ , 21 , ’CLEMENT ’ ) )D2 300777 EMPS TYPE(EMP TYPE( ’N2 ’ , 22 , ’CLEMENTINE ’ ) )D3 300000D4 400000 EMPS TYPE(EMP TYPE( ’N5 ’ , 25 , ’ B i b i ’ ) ,

EMP TYPE( ’N6 ’ , 26 , ’ C i c i ’ ) ,EMP TYPE( ’N7 ’ , 27 , ’ D i d i ’ ) ,EMP TYPE( ’N8 ’ , 28 , ’ F i f i ’ ) )

D5 400000 EMPS TYPE(EMP TYPE( ’N5 ’ , 25 , ’ B i b i ’ ) ,EMP TYPE( ’N8 ’ , 28 , ’ F i f i ’ ) )

149/193

Tables imbriquees (NESTED TABLE)Modification

Mise a jour de la table principale selon un predicat dans latable imbriquee

update departement d s e t d . budget = d . budget + 999where e x i s t s

( s e l e c t ∗ from tab l e( s e l e c t dt . employes from departement dt

where dt . numdep = d . numdep ) ntwhere nt . age > 25 ) ;

150/193

Tables imbriquees (NESTED TABLE)Modification

SQL> s e l e c t ∗ from departement ;NUMDEP BUDGET EMPLOYES( NINSEE , AGE, NOM)−−−−−−− −−−−−−− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−D1 150777 EMPS TYPE(EMP TYPE( ’N1 ’ , 21 , ’CLEMENT ’ ) )D2 300777 EMPS TYPE(EMP TYPE( ’N2 ’ , 22 , ’CLEMENTINE ’ ) )D3 300000D4 400999 EMPS TYPE(EMP TYPE( ’N5 ’ , 25 , ’ B i b i ’ ) ,

EMP TYPE( ’N6 ’ , 26 , ’ C i c i ’ ) ,EMP TYPE( ’N7 ’ , 27 , ’ D i d i ’ ) ,EMP TYPE( ’N8 ’ , 28 , ’ F i f i ’ ) )

D5 400999 EMPS TYPE(EMP TYPE( ’N5 ’ , 25 , ’ B i b i ’ ) ,EMP TYPE( ’N8 ’ , 28 , ’ F i f i ’ ) )

Remarque : les memes employes sont dans deux departements

151/193

Tables imbriquees (NESTED TABLE)Modification

Mise a jour dans la table imbriquee

updatet ab l e ( s e l e c t d . employes from departement d

where d . numdep = ’D2 ’ ) nts e t nt . age = 44

where nt . n i n s e e = ’N2 ’ ;

152/193

Tables imbriquees (NESTED TABLE)Modification

SQL> s e l e c t ∗ from departement ;NUMDEP BUDGET EMPLOYES( NINSEE , AGE, NOM)−−−−−−− −−−−−−− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−D1 150777 EMPS TYPE(EMP TYPE( ’N1 ’ , 21 , ’CLEMENT ’ ) )D2 300777 EMPS TYPE(EMP TYPE( ’N2 ’ , 44 , ’CLEMENTINE ’ ) )D3 300000D4 400999 EMPS TYPE(EMP TYPE( ’N5 ’ , 25 , ’ B i b i ’ ) ,

EMP TYPE( ’N6 ’ , 26 , ’ C i c i ’ ) ,EMP TYPE( ’N7 ’ , 27 , ’ D i d i ’ ) ,EMP TYPE( ’N8 ’ , 28 , ’ F i f i ’ ) )

D5 400999 EMPS TYPE(EMP TYPE( ’N5 ’ , 25 , ’ B i b i ’ ) ,EMP TYPE( ’N8 ’ , 28 , ’ F i f i ’ ) )

Remarque : Il est impossible de modifier plusieurs enregistrementsde differentes tables imbriquees avec une seule commandeUPDATE !

153/193

Tables imbriquees (NESTED TABLE)Suppression

Suppression dans la table principale

de l e t e from departementwhere numdep = ’D3 ’ ;

SQL> s e l e c t ∗ from departement ;NUMDEP BUDGET EMPLOYES( NINSEE , AGE, NOM)−−−−−−− −−−−−−− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−D1 150777 EMPS TYPE(EMP TYPE( ’N1 ’ , 21 , ’CLEMENT ’ ) )D2 300777 EMPS TYPE(EMP TYPE( ’N2 ’ , 44 , ’CLEMENTINE ’ ) )D4 400999 EMPS TYPE(EMP TYPE( ’N5 ’ , 25 , ’ B i b i ’ ) ,

EMP TYPE( ’N6 ’ , 26 , ’ C i c i ’ ) ,EMP TYPE( ’N7 ’ , 27 , ’ D i d i ’ ) ,EMP TYPE( ’N8 ’ , 28 , ’ F i f i ’ ) )

D5 400999 EMPS TYPE(EMP TYPE( ’N5 ’ , 25 , ’ B i b i ’ ) ,EMP TYPE( ’N8 ’ , 28 , ’ F i f i ’ ) )

154/193

Tables imbriquees (NESTED TABLE)Suppression

Suppression a partir d’une valeur de la table imbriqueeElimination des departements qui emploient une personnedont le nom est FIFI

de l e t e from departement dwhere e x i s t s ( s e l e c t ∗ fromtab l e ( s e l e c t dt . employes from departement dt

where dt . numdep = d . numdep ) ntwhere upper ( nt . nom) l i k e ’%F I F I%’ ) ;

155/193

Tables imbriquees (NESTED TABLE)Suppression

SQL> s e l e c t ∗ from departement ;NUMDEP BUDGET EMPLOYES( NINSEE , AGE, NOM)−−−−−−− −−−−−−− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−D1 150777 EMPS TYPE(EMP TYPE( ’N1 ’ , 21 , ’CLEMENT ’ ) )D2 300777 EMPS TYPE(EMP TYPE( ’N2 ’ , 44 , ’CLEMENTINE ’ ) )

156/193

Tables imbriquees (NESTED TABLE)Suppression

Suppression d’une table imbriqueeElimination des departements qui emploient une personnedont le nom est CLEMENT

de l e t e t ab l e ( s e l e c t dt . employesfrom departement dt where dt . numdep = ’D1 ’ ) ntwhere nt . nom = ’CLEMENT ’ ;

SQL> s e l e c t ∗ from departement ;NUMDEP BUDGET EMPLOYES( NINSEE , AGE, NOM)−−−−−−− −−−−−−− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−D1 150777D2 300777 EMPS TYPE(EMP TYPE( ’N2 ’ , 44 , ’CLEMENTINE ’ ) )

157/193

Tables imbriquees (NESTED TABLE)Interrogation

Quels sont les numeros et les noms des employes dudepartement D4 ?

SQL> s e l e c t ∗ from departement ;NUMDEP BUDGET EMPLOYES( NINSEE , AGE, NOM)−−−−−−− −−−−−−− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−D1 150777 EMPS TYPE(EMP TYPE( ’N1 ’ , 21 , ’CLEMENT ’ ) )D2 300777 EMPS TYPE(EMP TYPE( ’N2 ’ , 44 , ’CLEMENTINE ’ ) )D4 400999 EMPS TYPE(EMP TYPE( ’N5 ’ , 25 , ’ B i b i ’ ) ,

EMP TYPE( ’N6 ’ , 26 , ’ C i c i ’ ) ,EMP TYPE( ’N7 ’ , 27 , ’ D i d i ’ ) ,EMP TYPE( ’N8 ’ , 28 , ’ F i f i ’ ) )

D5 400999 EMPS TYPE(EMP TYPE( ’N5 ’ , 25 , ’ B i b i ’ ) ,EMP TYPE( ’N8 ’ , 28 , ’ F i f i ’ ) )

158/193

Tables imbriquees (NESTED TABLE)Interrogation

s e l e c t nt . n i n s e e , nt . nomfrom tab l e ( s e l e c t dt . employes from departement dtwhere dt . numdep = ’D4 ’ ) nt ;

NINSEE NOM−−−−−−−−−−−−− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−N5 B i b iN6 C i c iN7 D i d iN8 F i f i

159/193

Tables imbriquees (NESTED TABLE)Interrogation

Quels sont les numeros et les noms des employes dudepartement D4 qui ont moins de 26 ans ?

SQL> s e l e c t ∗ from departement ;NUMDEP BUDGET EMPLOYES( NINSEE , AGE, NOM)−−−−−−− −−−−−−− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−D1 150777 EMPS TYPE(EMP TYPE( ’N1 ’ , 21 , ’CLEMENT ’ ) )D2 300777 EMPS TYPE(EMP TYPE( ’N2 ’ , 44 , ’CLEMENTINE ’ ) )D4 400999 EMPS TYPE(EMP TYPE( ’N5 ’ , 25 , ’ B i b i ’ ) ,

EMP TYPE( ’N6 ’ , 26 , ’ C i c i ’ ) ,EMP TYPE( ’N7 ’ , 27 , ’ D i d i ’ ) ,EMP TYPE( ’N8 ’ , 28 , ’ F i f i ’ ) )

D5 400999 EMPS TYPE(EMP TYPE( ’N5 ’ , 25 , ’ B i b i ’ ) ,EMP TYPE( ’N8 ’ , 28 , ’ F i f i ’ ) )

160/193

Tables imbriquees (NESTED TABLE)Interrogation

s e l e c t nt . n i n s e e , nt . nomfrom tab l e ( s e l e c t dt . employes from departement dtwhere dt . numdep = ’D4 ’ ) nt where nt . age < 2 6 ;

NINSEE NOM−−−−−−−−−−−−− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−N5 B i b i

161/193

Tables imbriquees (NESTED TABLE)Interrogation

Requete : Quel est le nombre d’employes du departementD4 ?

SQL> s e l e c t ∗ from departement ;NUMDEP BUDGET EMPLOYES( NINSEE , AGE, NOM)−−−−−−− −−−−−−− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−D1 150777 EMPS TYPE(EMP TYPE( ’N1 ’ , 21 , ’CLEMENT ’ ) )D2 300777 EMPS TYPE(EMP TYPE( ’N2 ’ , 44 , ’CLEMENTINE ’ ) )D4 400999 EMPS TYPE(EMP TYPE( ’N5 ’ , 25 , ’ B i b i ’ ) ,

EMP TYPE( ’N6 ’ , 26 , ’ C i c i ’ ) ,EMP TYPE( ’N7 ’ , 27 , ’ D i d i ’ ) ,EMP TYPE( ’N8 ’ , 28 , ’ F i f i ’ ) )

D5 400999 EMPS TYPE(EMP TYPE( ’N5 ’ , 25 , ’ B i b i ’ ) ,EMP TYPE( ’N8 ’ , 28 , ’ F i f i ’ ) )

162/193

Tables imbriquees (NESTED TABLE)Interrogation

s e l e c t COUNT(∗ ) ”Nombre d ’ employ e s ”from tab l e ( s e l e c t dt . employes from departement dtwhere dt . numdep = ’D4 ’ ) nt ;

Nombre d ’ employ e s−−−−−−−−−−−−−−−−−

4

163/193

Tables imbriquees (NESTED TABLE)Interrogation

Quels sont les numeros et les noms des employes desdepartements D1 et D2 ?

SQL> s e l e c t ∗ from departement ;NUMDEP BUDGET EMPLOYES( NINSEE , AGE, NOM)−−−−−−− −−−−−−− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−D1 150777 EMPS TYPE(EMP TYPE( ’N1 ’ , 21 , ’CLEMENT ’ ) )D2 300777 EMPS TYPE(EMP TYPE( ’N2 ’ , 44 , ’CLEMENTINE ’ ) )D4 400999 EMPS TYPE(EMP TYPE( ’N5 ’ , 25 , ’ B i b i ’ ) ,

EMP TYPE( ’N6 ’ , 26 , ’ C i c i ’ ) ,EMP TYPE( ’N7 ’ , 27 , ’ D i d i ’ ) ,EMP TYPE( ’N8 ’ , 28 , ’ F i f i ’ ) )

D5 400999 EMPS TYPE(EMP TYPE( ’N5 ’ , 25 , ’ B i b i ’ ) ,EMP TYPE( ’N8 ’ , 28 , ’ F i f i ’ ) )

164/193

Tables imbriquees (NESTED TABLE)Interrogation

s e l e c t s e l e c t nt . n i n s e e , nt . nom from tab l e( s e l e c t dt . employes from departement dt

where dt . numdep = ’D1 ’ ) ntunions e l e c t nt . n i n s e e , nt . nom from tab l e

( s e l e c t dt . employes from departement dtwhere dt . numdep = ’D2 ’ ) nt ;

NINSEE NOM−−−−−−−−−−−−− −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−N1 CLEMENTN2 CLEMENTINE

165/193

Plusieurs Tables imbriqueesCreation

Regroupement des tables imbriquees Professeurs et Formations dans la

table Cours

NumC Titre Professeurs FormationsNom Specialite Filiere Horaire

c r ea te t y p e p r o f t y p e as o b j e c t(nom va rcha r2 ( 3 0 ) , s p e c i a l i t e va rcha r2 ( 3 0 ) )

/c r ea te t y p e p r o f s t y p e as t ab l e o f p r o f t y p e/c r ea te t y p e f o r m a t i o n t y p e as o b j e c t

( f i l i e r e va rcha r2 ( 3 0 ) , h o r a i r e number ( 5 ) )/c r ea te t y p e f o r m a t i o n s t y p e as t ab l e o f f o r m a t i o n t y p e/

166/193

Plusieurs Tables imbriqueesCreation

c r ea te t y p e p r o f t y p e as o b j e c t(nom va rcha r2 ( 3 0 ) , s p e c i a l i t e va rcha r2 ( 3 0 ) )

/c r ea te t y p e p r o f s t y p e as t ab l e o f p r o f t y p e/c r ea te t y p e f o r m a t i o n t y p e as o b j e c t

( f i l i e r e va rcha r2 ( 3 0 ) , h o r a i r e number ( 5 ) )/c r ea te t y p e f o r m a t i o n s t y p e as t ab l e o f f o r m a t i o n t y p e/c r ea te t y p e c o u r s t y p e as o b j e c t

( numc va rcha r2 ( 5 ) , t i t r e va rcha r2 ( 1 5 ) ,p r o f e s s e u r s p r o f s t y p e , f o r m a t i o n s f o r m a t i o n s t y p e )

/c r ea te t ab l e c o u r s o f c o u r s t y p e

( c o n s t r a i n t p k c o u r s pr imary key ( numc ) )n e s t e d t a b l e p r o f e s s e u r s s t o r e as t a b p r o f s ,n e s t e d t a b l e f o r m a t i o n s s t o r e as t a b f o r m a t i o n s ;

167/193

Plusieurs Tables imbriqueesInsertion

Insertion d’un objet dans la table Cours, sans le lier a desprofesseurs ou a des formations

i n s e r t i n t o c o u r s va l u e s ( ’BD ’ , ’ Bases de Donnees ’ ,p r o f s t y p e ( ) , f o r m a t i o n s t y p e ( ) ) ;

s e l e c t ∗ from c o u r s ;

NUMC TITRE PROFESSEURS(NOM, SPECIALITE ) FORMATIONS( FILIERE , HORAIRE)−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−BD Bases de Donnees PROFS TYPE ( ) FORMATIONS TYPE( )

168/193

Plusieurs Tables imbriqueesInsertion

Insertion, avec VALUES, dans 2 tables imbriquees :

i n s e r t i n t o c o u r s va l u e s ( ’DW’ , ’ Data WareHouse ’ ,

p r o f s t y p e ( p r o f t y p e ( ’ Cl emence ’ , ’BD ’ ) ,p r o f t y p e ( ’Adam ’ , ’BD ’ ) ) ,

f o r m a t i o n s t y p e ( f o r m a t i o n t y p e ( ’ Master1 ’ , 1 00 ) ,f o r m a t i o n t y p e ( ’DESS EID ’ , 20 0) ,f o r m a t i o n t y p e ( ’DEA AIOC ’ , 200) ) ) ;

169/193

Plusieurs Tables imbriqueesInsertion

s e l e c t ∗ from c o u r s ;

NUMC TITRE PROFESSEURS(NOM, SPECIALITE ) FORMATIONS( FILIERE , HORAIRE)−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−BD Bases de Donnees PROFS TYPE ( ) FORMATIONS TYPE( )DW Data WareHouse PROFS TYPE( FORMATIONS TYPE(

PROF TYPE( ’ Cl emence ’ , ’BD ’ ) , FORMATION TYPE( ’ Master1 ’ , 10 0) ,PROF TYPE( ’Adam ’ , ’BD ’ ) ) FORMATION TYPE( ’ Master 2P ’ , 20 0) ,

FORMATION TYPE( ’ Master 2R ’ , 2 0 0 ) )

170/193

Plusieurs Tables imbriqueesInsertion

Insertion, avec VALUES, dans 2 tables imbriquees

i n s e r t i n t o c o u r s va l u e s ( ’BDA ’ ,’ Bases de Donnees Avanc ees ’ ,

p r o f s t y p e ( p r o f t y p e ( ’ Cl emence ’ , ’BD ’ ) ,p r o f t y p e ( ’ T r a i f o r ’ , ’BD ’ ) ,p r o f t y p e ( ’ Le Bon ’ , ’BD ’ ) ) ,

f o r m a t i o n s t y p e (f o r m a t i o n t y p e ( ’ Master 2P ’ , 2 00 ) ,f o r m a t i o n t y p e ( ’ Master 2R ’ , 200) ) ) ;

171/193

Plusieurs Tables imbriqueesInsertion

CoursNumC Titre Professeurs Formations

Nom Specialite Filiere HoraireBD Bases de donneesDW DataWareHouse Clemence BD Master 1 100

Adam BD Master 2P 200Master 2R 200

BDA Bases de donnees avances Clemence BD Master 2P 200Traifor BD Master 2R 200Le Bon BD

L’affichage SQL+ est tres mauvais ...s e l e c t ∗ from c o u r s ;

NUMC TITRE PROFESSEURS(NOM, SPECIALITE ) FORMATIONS( FILIERE , HORAIRE)BD Bases de Donnees PROFS TYPE ( ) FORMATIONS TYPE( )DW Data WareHouse PROFS TYPE(PROF TYPE( ’ Cl emence ’ , ’BD ’ ) , PROF TYPE( ’Adam ’ , ’BD ’ ) )

FORMATIONS TYPE(FORMATION TYPE( ’ Master1 ’ , 10 0) ,FORMATION TYPE( ’ Master 2P ’ , 20 0) , FORMATION TYPE( ’ Master 2R ’ , 2 0 0 ) )BDA Bases de Donnees Avanc ees PROFS TYPE(PROF TYPE( ’ Cl emence ’ , ’BD ’ ) , PROF TYPE( ’ T r a i f o r ’ , ’BD ’ ) ,

PROF TYPE( ’ Le Bon ’ , ’BD ’ ) )FORMATIONS TYPE(FORMATION TYPE( ’ Master 2P ’ , 20 0) ,

FORMATION TYPE( ’ Master 2R ’ , 2 0 0 ) )

172/193

Plusieurs Tables imbriqueesInsertion

Insertion, avec TABLE et VALUES, dans 2 tables imbriqueesEnregistrement des donnees : les professeurs Traifor et Parisi enseignentles BD

i n s e r t i n t o t ab l e ( s e l e c t c . p r o f e s s e u r s from c o u r s cwhere numc = ’BD ’ ) va l u e s ( ’ T r a i f o r ’ , ’ S I ’ ) ;

i n s e r t i n t o t ab l e ( s e l e c t c . p r o f e s s e u r s from c o u r s cwhere numc = ’BD ’ ) va l u e s ( ’ P a r i s i ’ , ’DM’ ) ;

s e l e c t ∗ from c o u r s ;

NumC Titre Professeurs FormationsNom Specialite Filiere Horaire

BD Bases de donnees Traifor SIParisi DM

DW DataWareHouse Clemence BD Master 1 100Adam BD Master 2P 200

Master 2R 200BDA Bases de donnees avances Clemence BD Master 2P 200

Traifor BD Master 2R 200Le Bon BD

173/193

Plusieurs Tables imbriqueesInsertion

Insertion, avec TABLE et VALUES, dans 2 tables imbriqueesLe cours BD :

appartient au cursus INFO1

requiert un volume horaire de 70 heures

i n s e r t i n t o t ab l e ( s e l e c t c . f o r m a t i o n s from c o u r s cwhere numc = ’BD ’ ) va l u e s ( ’ INFO1 ’ , 7 0 ) ;

s e l e c t ∗ from c o u r s ;

NumC Titre Professeurs FormationsNom Specialite Filiere Horaire

BD Bases de donnees Traifor SI INFO1 70Parisi DM

DW DataWareHouse Clemence BD Master 1 100Adam BD Master 2P 200

Master 2R 200BDA Bases de donnees avances Clemence BD Master 2P 200

Traifor BD Master 2R 200Le Bon BD

174/193

Plusieurs Tables imbriqueesInsertion

Insertion , avec TABLE et SELECT, dans 2 tables imbriquees

Le cours BD doit etre enseigne desormais dans toutes les filieresconcernees par la matiere DW a condition que celle-ci aient unvolume de moins de 150 heures

i n s e r t i n t o t ab l e ( s e l e c t c . f o r m a t i o n s from c o u r s cwhere c . numc = ’BD ’ )

s e l e c t n e s t e d f . f i l i e r e , n e s t e d f . h o r a i r efrom tab l e ( s e l e c t c . f o r m a t i o n s from c o u r s c

where c . numc = ’DW’ ) n e s t e d fwhere n e s t e d f . h o r a i r e < 1 5 0 ;

175/193

Plusieurs Tables imbriqueesInsertion

s e l e c t ∗ from c o u r s ;

NumC Titre Professeurs FormationsNom Specialite Filiere Horaire

BD Bases de donnees Traifor SI INFO1 70Parisi DM Master 1

DW DataWareHouse Clemence BD Master 1 100Adam BD Master 2P 200

Master 2R 200BDA Bases de donnees avances Clemence BD Master 2P 200

Traifor BD Master 2R 200Le Bon BD

176/193

Plusieurs Tables imbriqueesModification – Exemple

Dans la matiere Data WareHouse, le professeur Adam est remplacepar le professeur Saitout et que les horaires pour le Master 2Paugmentent de 30%

update t ab l e ( s e l e c t c . p r o f e s s e u r s from c o u r s cwhere c . t i t r e = ’ Data WareHouse ’ ) n e s t e d p r f

s e t n e s t e d p r f . nom = ’ S a i t o u ’ where n e s t e d p r f . nom = ’Adam ’ ;

update t ab l e ( s e l e c t c . f o r m a t i o n s from c o u r s cwhere c . t i t r e = ’ Data WareHouse ’ ) n e s t e d f r m

s e t n e s t e d f r m . h o r a i r e = h o r a i r e ∗ 1 . 3where n e s t e d f r m . f i l i e r e l i k e ’ Master 2P%’ ;

177/193

Plusieurs Tables imbriqueesModification

NumC Titre Professeurs FormationsNom Specialite Filiere Horaire

BD Bases de donnees Traifor SI INFO1 70Parisi DM Master 1

DW DataWareHouse Clemence BD Master 1 100Saitou BD Master 2P 260

Master 2R 200BDA Bases de donnees avances Clemence BD Master 2P 200

Traifor BD Master 2R 200Le Bon BD

178/193

Plusieurs Tables imbriqueesModification – Exemple

Explications :

Modification a l’aide de la commande UPDATE d’un ouplusieurs attributs dans une des deux tables imbriquees de latable cours

Modification d’un professeurs et une formation dans le cadred’une matiere donnee : 2 requetes UPDATE distinctes(car les 2 tables imbriquees sont concernees)

Necessite de recourir a un alias pour identifier l’objet dans latable imbriquee

179/193

Plusieurs Tables imbriqueesModification

Pour la matiere DW, remplacement de la filiere Master1 par lafiliere MASTER 2 et enregistrement d’un volume horaire de 150heures

update t ab l e ( s e l e c t c . f o r m a t i o n s from c o u r s cwhere c . t i t r e = ’ Data WareHouse ’ ) n e s t e d f r m

s e t n e s t e d f r m . h o r a i r e = 150 , n e s t e d f r m . f i l i e r e = ’MASTER 2 ’where n e s t e d f r m . f i l i e r e = ’ Master1 ’ ;

180/193

Plusieurs Tables imbriqueesModification

NumC Titre Professeurs FormationsNom Specialite Filiere Horaire

BD Bases de donnees Traifor SI INFO1 70Parisi DM Master 1

DW DataWareHouse Clemence BD MASTER 2 150Saitou BD Master 2P 260

Master 2R 200BDA Bases de donnees avances Clemence BD Master 2P 200

Traifor BD Master 2R 200Le Bon BD

181/193

Plusieurs Tables imbriqueesSuppression

Suppression dans 2 tables imbriqueesLe professeur Parisi n’enseigne plus la matiere BD. Enregistrementde cette information

de l e t e t ab l e ( s e l e c t c . p r o f e s s e u r sfrom c o u r s c where c . numc = ’BD ’ ) ntwhere nt . nom = ’ P a r i s i ’ ;

NumC Titre Professeurs FormationsNom Specialite Filiere Horaire

BD Bases de donnees Traifor SI INFO1 70Master 1

DW DataWareHouse Clemence BD MASTER 2 100Saitou BD Master 2P 260

Master 2R 200BDA Bases de donnees avances Clemence BD Master 2P 200

Traifor BD Master 2R 200Le Bon BD

182/193

Plusieurs Tables imbriqueesSuppression

Suppression dans 2 tables imbriqueesLa filiere Master1 n’inclut plus la matiere BD dans son cursus.Enregistrement de cette information

de l e t e t ab l e ( s e l e c t c . f o r m a t i o n sfrom c o u r s c where c . numc = ’BD ’ ) ntwhere nt . f i l i e r e = ’ Master1 ’ ;

NumC Titre Professeurs FormationsNom Specialite Filiere Horaire

BD Bases de donnees Traifor SI INFO1 70

DW DataWareHouse Clemence BD MASTER 2 100Saitou BD Master 2P 260

Master 2R 200BDA Bases de donnees avances Clemence BD Master 2P 200

Traifor BD Master 2R 200Le Bon BD

183/193

Plusieurs niveaux d’imbrication

NumC Titre Professeurs FormationsNom Specialite Filiere Horaire Dates

JourBD Bases de donnees Traifor SI INFO1 70

DW DataWareHouse Clemence BD MASTER 2 100Saitou BD Master 2P 260

Master 2R 200BDA Bases de donnees avances Clemence BD Master 2P 200

Traifor BD Master 2R 200Le Bon BD

Oracle 8 ne permet pas d’implanter plusieurs niveaux d’imbricationdans une table objet-relationnelle?? dans oracle 9i et/ou 10g ??

184/193

Tableaux pre-dimensionnes (VARRAY)VARRAY (Varrying ARRAY ) : collection ordonnee et limiteed’elements de meme typeSi le nombre d’elements maximum contenus dans une tableimbriquees est connu a prioripossibilite d’utiliser un tableau de type VARRAY a la placed’une table imbriqueeExemple : stockage de 3 numeros de telephone maximum parprofesseur

Professeurs :NumP NomP Adresse Telephones

AdrNum AdrRue AdrVille AdrCP NumTel

185/193

Tableaux de taille pre-dimensionnee (VARRAY)Exemple

Stockage de 3 numeros de telephone maximum par professeur

Creation

c r ea te t y p e A A d r e s s e t y p e as o b j e c t(AdrNum va rcha r2 ( 1 0 ) , AdrNom va rcha r2 ( 3 0 ) ,

A d r V i l l e va rcha r2 ( 2 0 ) , AdrCP va rcha r2 ( 5 ) )/c r ea te t y p e t e l t y p e as o b j e c t ( NumTel va rcha r2 ( 2 0 ) )/

c r ea te t y p e t e l s t y p e as v a r r a y ( 3 ) o f t e l t y p e/

c r ea te t y p e p r o f e s s e u r t y p e as o b j e c t(nump va rcha r2 ( 5 ) , nomp va rcha r2 ( 2 0 ) ,

A d r e s s e A A d r e s s e t y p e , T e le p h o ne s t e l s t y p e )/c r ea te t ab l e p r o f e s s e u r s o f p r o f e s s e u r t y p e

( c o n s t r a i n t p k p r o f e s s e u r s pr imary key (nump ) ) ;

186/193

Tableaux de taille pre-dimensionnee (VARRAY)Insertion : INSERT avec VALUES

Stockage de 3 objets de type Professeur avec respectivement aucun,trois et deux numeros de telephone (enregistrements du VARRAY)

i n s e r t i n t o p r o f e s s e u r s va l u e s ( ’ P1 ’ , ’ Cl emence ’ ,A A d r e s s e t y p e ( 7 , ’ Avenue de l a Pa ix ’ , ’ P a r i s ’ , ’ 75009 ’ ) ,t e l s t y p e ( ) ) ;

i n s e r t i n t o p r o f e s s e u r s va l u e s ( ’ P2 ’ , ’Adam ’ ,A A d r e s s e t y p e ( 7 7 , ’ Rue de l a l i b e r t e ’ , ’ P a r i s ’ , ’ 75015 ’ ) ,t e l s t y p e ( t e l t y p e ( ’ 01 53 80 07 99 ’ ) ,

t e l t y p e ( ’ 06 14 56 07 06 ’ ) ,t e l t y p e ( ’ 01 49 40 07 40 ’ ) ) ) ;

i n s e r t i n t o p r o f e s s e u r s va l u e s ( ’ P3 ’ , ’ S a i t o u ’ ,A A d r e s s e t y p e ( 1 , ’ Rue de l a l i b e r t e ’ , ’ P a r i s ’ , ’ 75015 ’ ) ,t e l s t y p e ( t e l t y p e ( ’ 01 53 80 53 80 ’ ) ,t e l t y p e ( ’ 06 14 56 14 77 ’ ) , NULL ) ) ;

187/193

Tableaux de taille pre-dimensionnee (VARRAY)

NumP NomP Adresse TelephonesAdrNum AdrRue AdrVille AdrCP NumTel

P1 Clemence 77 Avenue de la paix Paris 75009 NULLNULLNULL

P2 Adam 7 Rue de la liberte Paris 75015 01 53 80 07 9906 14 56 07 0601 49 40 07 40

P3 Saitou 1 Rue de la liberte Paris 75015 01 53 80 53 8006 14 56 14 77

NULL

188/193

Tableaux de taille pre-dimensionnee (VARRAY)

Insertion : INSERT dans un VARRAY avec PL/SQL

Avec les tableaux VARRAY, l’operateur TABLE n’est pasoperationnel (Version 8 d’oracle – a verifier sur les V9 et V10g)Pour manipuler les tableaux, il est necessaire d’utiliser unprogramme PL/SQL

DECLAREn e w t e l s t e l s t y p e := t e l s t y p e ( t e l t y p e ( ’ 01 55 55 55 55 ’ ) ,

t e l t y p e ( ’ 06 06 98 98 98 ’ ) ,t e l t y p e ( ’ 01 40 40 40 40 ’ ) ) ;

BEGINupdate p r o f e s s e u r ss e t t e l e p h o n e s = n e w t e l swhere nump = ’ P1 ’ ;

END ;/

189/193

Tableaux de taille pre-dimensionnee (VARRAY)NumP NomP Adresse Telephones

AdrNum AdrRue AdrVille AdrCP NumTelP1 Clemence 77 Avenue de la paix Paris 75009 01 55 55 55 55

06 06 98 98 9801 40 40 40 40

P2 Adam 7 Rue de la liberte Paris 75015 01 53 80 07 9906 14 56 07 0601 49 40 07 40

P3 Saitou 1 Rue de la liberte Paris 75015 01 53 80 53 8006 14 56 14 77

NULL

Remarque :

Inserer un seul numero de telephone pour le professeur P1 etle placer au 2eme rang dans le tableau telephonesRedaction ci-dessous de l’instruction d’affectation :

n e w t e l s t e l s t y p e := t e l s t y p e (NULL ,t e l t y p e ( ’ 06 06 98 98 98 ’ ) , NULL ) ;

190/193

ConclusionComparaison entre NESTED TABLE et VARRAY

A verifier selon les versions d’Oracle

Possibilite de definir un index dans un NESTED TABLE

Le nombre d’elements n’est pas limite dans une tableimbriquee

Pas de possibilite de definir d’index dans un VARRAY

Le nombre d’elements est limite dans une tableaupre-dimensionne

Possibilite d’acceder directement aux enregistrements stockesdans les deux structures de donneesfonctions : EXISTS, FIRST, LAST, etc.

Performances ? : NestedTable > Varray

191/193

Bilan

192/193

To be continued...

193/193

top related