Vous êtes sur la page 1sur 230

Oracle et le Modle Objet Relationnel

Gabriel MOPOLO-MOKE prof. Associ UNSA 2005/2006

Page

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

1. Plan Gnral
I

1. PLAN GENERAL 2. INTRODUCTION 3. LES TYPES DE BASE (Prdfinis) 4. LES TYPES ABSTRAITS (COMPLEXES) 5. NOTION DIDENTITE 6. LA NOTION DE COLLECTION 7. CREATION ET MANIPULATION DOBJETS 8. LES LIENS DASSOCIATIONS
2
Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

Page

1. Plan Gnral
I

9. LIENS D HERITAGE 10. LES VUES 11. GESTION DES OBJETS VOLUMINEUX 12. PL/SQL OBJET 13. Import/Export 14. CONCLUSION 15. EXERCICES

Page

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

2. INTRODUCTION
I

Pourquoi Oracle Objet?


Modlisation des donnes complexes
Encapsulation des donnes Type abstraits Collections (varray, nested table) Liens complexes(composition, association, hritage) Dpassement de la premire forme Normale du modle relationnel

Manipulation des objets volumineux LOBs (Large Objects). Va au del des blobs traditionnels

Page

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

2. INTRODUCTION
I

Pourquoi Oracle Objet? (suite)


Evolutivit
Exploiter de nouveaux gisements de donnes dans les entreprises Donnes une vision objet aux applications relationnelles existantes

Applications internet et intranet


SGBD ouvert supportant Java en natif au mme titre que PL/SQL avec une intgration forte dans l environnement ORB Donnes XML directement gres par le SGBD

Page

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

2. INTRODUCTION
I

Approche dintgration des objets dans Oracle


Oracle suit lapproche SQL3 Oracle tend son noyau relationnel vers lobjet via la notion de domaine (type):
Les colonnes des tables peuvent maintenant tre dfinis sur des types (domaines) simples ou complexes Relation R (D1 X D2 X X Dn)
Di pouvant tre un Type scalaire ou un type complexe

Page

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

3. LES TYPES PREDEFINIS


I

Les types de base (CHAR, VARCHAR2, DATE, NUMBER, .) de la version 7 sont conservs dans les versions objets Les nouveaux types
Les associations rfrentielles "Pre/Fils" (REF). Les collections : VARRAY (tableaux) et Nested Tables (Tables imbriques). Les LOBs : BLOB, CLOB, BFILE NOTE : L utilisateur pourra ajouter ses propres types: les types donnes abstraits (ADT).

Page

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

PLAN
Les Types de donnes Abstraits(ADT) Exemple de cration dun ADT sous Oracle Dfinition des Mthodes dun Type Abstrait Comparaison sur les ADT Complment sur les ADT Oracle Modification dun ADT Suppression dun ADT Visualisatioin des Informations sur les ADT Encapsulation Constructeur Instanciation

Page

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Les Types de donnees Abstraits(ADT)


Un Type abstrait de donnes peut tre vu comme une boite noire accessible uniquement par des oprateurs Les spcifications du type sont indpendantes de leurs implmentations Permet lutilisateur de dfinir lui-mme ses propres types

Page

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Les Types de donnees Abstraits(ADT)


SPECIFICATION DU TYPE

DECLARATION DES ATTRIBUTS

DECLARATION DES METHODES

CORPS DU TYPE

IMPLEMENTATION DES METHODES

Page

10

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Les Types de donnees Abstraits(ADT)


Syntaxe de cration dun type Forward ou TYPE INCOMPLET
permet de rsoudre le problme de rfrences croises en type CREATE [OR REPLACE] TYPE nomType; CREATE OR REPLACE TYPE pilote_t;

Syntaxe de cration dun type objet


CREATE [OR REPLACE] TYPE nomType AS OBJECT( { nomAttribut1 typeDeDonne, nomAttributN typeDeDonne, {MAP | ORDER} MEMBER function_specification, {STATIC | MEMBER} {functionSpecification | procedureSpecification } [PRAGMA RESTRICT_REFENCES ({nomFonction|default}, [WNDS, WNPS, RNDS, RNPS, TRUST])] }) Note : les clauses seront dcrites par la suite
11

Page

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Exemple de cration dun ADT sous Oracle


Type abstrait sans champs complexes
CREATE TYPE adresse_t as object( Numero NUMBER(4), Rue VARCHAR2(20), Code_Postal NUMBER(5), Ville VARCHAR2(20));

Type abstrait avec champs complexes


CREATE OR REPLACE TYPE Pilote_t AS OBJECT( PL# NUMBER(4), nom VARCHAR2(12), adresse adresse_t,-- type abstrait dfini pralablement Tel VARCHAR2(12), dnaiss DATE, salaire NUMBER(7,2));

ADT avec un champ de type rfrence


CREATE OR REPLACE TYPE REF_Pilote_t AS OBJECT( PL# NUMBER(4), nom VARCHAR2(12), adresse REF adresse_t, -- rfrence sur une adresse Tel VARCHAR2(12), dnaiss DATE, salaire number(7,2) );

Page

12

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Dfinition des Mthodes d un Type Abstrait


Lutilisateur peut dfinir autant de mthodes quils le souhaite dans un ADT Par contre il ne peut dfinir AUCUN CONSTRUCTEUR. Seul le constructeur par dfaut est utilisable La dclaration des mthodes se fait dans le TYPE SPECIFICATION et limplmentation dans le TYPE BODY Le mot cl MEMBER prcde chaque mthode dinstance Le mot cl STATIC prcde chaque mthode de classe

Page

13

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Dfinition des Mthodes dun Type Abstrait


Une mthode se caractrise par :
Un nom Un ensemble de paramtres : les donnes en entre(IN), les rsultats (OUT), les donnes/rsultats (IN/OUT), les appels par rfrence (CALL-BY-REFERENCE). Un ensemble de rsultats retourns par la mthode. Un ensemble d' exceptions. Un ensemble d' indicateurs prcisant la nature de la mthode (MAP/ORDER MEMBER, MEMBER, STATIC). PRAGMA RESTRICT_REFERENCE :WNDS, WNPS, RNDS, RNPS, TRUST) Un nom spcifique (un alias). Une clause de langage (PL/SQL, C, Java,etc) Une implmentation.

Page

14

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Dfinition des Mthodes dun Type Abstrait


Notes :
MAP function : permet de dfinir une rgle de comparaison s appuyant une des des colonnes du type. ORDER Function: permet de comparer deux objets. STATIC Function : Une mthode statique n' pas a l' objet courant comme paramtre implicite. Elle n a pas besoin d un objet pour tre invoque WNDS : interdit la modification de l tat de la base WNPS : interdit la modification de l tat du package(type) RNDS : interdit la lecture de l tat de la base RNPS : interdit la lecture de l tat du package(type) TRUST: dsactive provosoirement les interdits positionns

Page

15

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Dfinition des Mthodes dun ADT


Exemple de dfinition de mthodes
Spcification du type PILOTE CREATE OR REPLACE TYPE REF_Pilote_t AS OBJECT( PL# NUMBER(4), nom VARCHAR2(12), adresse adresse_t, -- type abstrait dfini pralablement Tel VARCHAR2(12), dnaiss DATE, salaire NUMBER(7,2), MEMBER FUNCTION getPiloteSalaire RETURN NUMBER, MEMBER FUNCTION setPiloteSalaire(SELF IN OUT ref_pilote_t, plNum IN NUMBER, newSalaire IN NUMBER) RETURN BOOLEAN, MEMBER PROCEDURE testSetSalaire, PRAGMA RESTRICT_REFERENCES(getPiloteSalaire, WNDS), PRAGMA RESTRICT_REFERENCES(setPiloteSalaire,RNPS) ); / NOTE : - le paramtre SELF doit tre pass en paramtre si l on souhaite modifier l objet courant dans UNE FONCTION. Ce passage n est pas ncessaire s il s agit d une PROCEDURE

Page

16

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Dfinition des Mthodes dun ADT


Exemple dimplmentation de mthodes
Implmentation du corps des mthodes getPiloteSalaire et setPiloteSalaire
CREATE OR REPLACE TYPE BODY ref_pilote_t IS MEMBER FUNCTION getPiloteSalaire RETURN NUMBER IS BEGIN RETURN salaire; END; MEMBER FUNCTION setPiloteSalaire (SELF IN OUT ref_pilote_t, plNum IN NUMBER, newSalaire IN NUMBER) RETURN BOOLEAN IS BEGIN IF pl# = plNum THEN salaire := newSalaire; return true; ELSE return false; END IF; END; MEMBER PROCEDURE testSetSalaire IS retour BOOLEAN; BEGIN retour := Self.setPiloteSalaire(10, 10000); END; END; /

Page

17

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Dfinition des Mthodes dun ADT


Autre exemple
CREATE TYPE Complex AS OBJECT ( rpart REAL, ipart REAL, MEMBER FUNCTION plus (x Complex) RETURN Complex, MEMBER FUNCTION less (x Complex) RETURN Complex, MEMBER FUNCTION times (x Complex) RETURN Complex, MEMBER FUNCTION divby (x Complex) RETURN Complex ); CREATE TYPE BODY Complex AS MEMBER FUNCTION plus (x Complex) RETURN Complex IS BEGIN RETURN Complex(rpart + x.rpart, ipart + x.ipart); END plus; MEMBER FUNCTION less (x Complex) RETURN Complex IS BEGIN RETURN Complex(rpart - x.rpart, ipart - x.ipart); END less; -- A SUIVRE

Page

18

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Dfinition des Mthodes dun ADT


Autre exemple
-- Suite MEMBER FUNCTION times (x Complex) RETURN Complex IS BEGIN RETURN Complex(rpart * x.rpart - ipart * x.ipart, rpart * x.ipart + ipart * x.rpart); END times; MEMBER FUNCTION divby (x Complex) RETURN Complex IS z REAL := x.rpart**2 + x.ipart**2; BEGIN RETURN Complex((rpart * x.rpart + ipart * x.ipart) / z, (ipart * x.rpart - rpart * x.ipart) / z); END divby; END; /

Page

19

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Comparaison dADT
Soit deux ADT C1 et C2 dun type Type 1. La comparaison de C1 et C2 peut tre faite par dfaut ou en rcrivant les mthodes MAP et ORDER la comparaison par dfaut nest possible que pour lgalit ou la diffrence entre objet. Exemple : C1 = C2, C1 != C2 Par dfaut, pour que deux objets soient gaux, la valeur de chacun de leurs attributs doit tre gale.

Page

20

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Comparaison dADT
MAP MEMBER fonction :
Permet de dfinir une fonction qui rend la position relative dun objet dans lensemble des instances dun type. Lordre des objets est dfini par rapport une valeur scalaire RENDUE PAR LA FONCTION. La valeur scalaire peut tre de type(DATE, NUMBER, VARCHAR2, les types ANSI SQL tels que CHARACTER or REAL) possde un seul paramtre implicite SELF adapt pour le TRI dun grand nombre dobjets et les JOINTURES PAR HACHAGE

Page

21

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Comparaison dADT
ORDER MEMBER fonction
permet de dfinir une mthode qui prend en paramtre un objet du type et le compare avec lobjet courant SELF lordre est dfinie sur une ou plusieurs colonne du type permet de comparer deux Objets Il sagit dune approche de comparaison "PERSONALISEE" Evaluation perptuelle de la fonction POUR CHAQUE OBJET => lenteur

Page

22

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Comparaison dADT
Notes :
il est impossible de dfinir la fois une mthode ORDER MEMBER et une mthode MAP MEMBER dans un mme type pas plus dune mthode ORDER ou MAP par type MAP et ORDER sont appeles automatiquement lors de la comparaison dobjets

Page

23

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Comparaison dADT
Exemple SANS les mthodes MAP et ORDER
CREATE OR REPLACE TYPE adresse2_t as object( Numero NUMBER(4), Rue VARCHAR2(20), Code_Postal NUMBER(5), Ville VARCHAR2(20), quartier VARCHAR2(20) ); / CREATE TABLE adresse2_table(adr adresse2_t ); INSERT INTO adresse2_table VALUES ( adresse2_t(1, rue du congres, 6000, Nice, Centre)); INSERT INTO adresse2_table VALUES ( adresse2_t(3, rue du congres, 6000, Nice, Centre)); INSERT INTO adresse2_table VALUES( adresse2_t(2, rue des garages, 6100, Nice, Nord)); INSERT INTO adresse2_table VALUES( adresse2_t(2, rue du port, 6300, Nice, Ouest)); SQL> SELECT * FROM adresse2_table ORDER BY adr; SELECT * FROM adresse2_table order by adr * ERROR at line 1: ORA-22950: cannot ORDER objects without MAP or ORDER method

Page

24

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Comparaison dADT
Exemple avec la mthode MAP MEMBER
CREATE OR REPLACE TYPE adresse2_t as object( Numero NUMBER(4), Rue VARCHAR2(20), Code_Postal NUMBER(5), Ville VARCHAR2(20), quartier VARCHAR2(20), MAP MEMBER FUNCTION compAdresse RETURN VARCHAR2, PRAGMA RESTRICT_REFERENCES (compAdresse, WNDS, WNPS, RNPS, RNDS) ); / CREATE OR REPLACE TYPE BODY adresse2_t IS MAP MEMBER FUNCTION compAdresse RETURN VARCHAR2 IS BEGIN RETURN ville||rue||numero; END; END; / NOTE : La valeur de Comparaison des instance de de adresse2_t sera : ville||rue||numero. Ce qui rduit la comparaison celle d un type scalaire Oracle

Page

25

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Comparaison dADT
Exemple avec la mthode MAP MEMBER
CREATE TABLE adresse2_table(adr adresse2_t ); INSERT INTO adresse2_table VALUES ( adresse2_t(1, rue du congres, 6000, Nice, Centre)); INSERT INTO adresse2_table VALUES ( adresse2_t(3, rue du congres, 6000, Nice, Centre)); INSERT INTO adresse2_table VALUES( adresse2_t(2, rue des garages, 6100, Nice, Nord)); INSERT INTO adresse2_table VALUES( adresse2_t(2, rue du port, 6300, Nice, Ouest)); SQL> SELECT * FROM adresse2_table; ADR(NUMERO, RUE, CODE_POSTAL, VILLE,QUARTIER) ADRESSE2_T(1, rue du congres, 6000, Nice, Centre) ADRESSE2_T(3, rue du congres, 6000, Nice, Centre) ADRESSE2_T(2, rue des garages, 6100, Nice, Nord) ADRESSE2_T(2, rue du port, 6300, Nice, Ouest) SQL> SELECT * FROM adresse2_table order by adr; ADR(NUMERO, RUE, CODE_POSTAL, VILLE,QUARTIER) ADRESSE2_T(2, rue des garages, 6100, Nice, Nord) ADRESSE2_T(1, rue du congres, 6000, Nice, Centre) ADRESSE2_T(3, rue du congres, 6000, Nice, Centre) ADRESSE2_T(2, rue du port, 6300, Nice, Ouest)

Page

26

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Comparaison dADT
Exemple avec la mthode ORDER MEMBER
Nous souhaitons classer les adresses selon leur position gographique. Nord, Centre, Sud, Est et enfin Ouest. MAP MEMBER ne suffit plus.

CREATE OR REPLACE TYPE adresse2_t as object( Numero NUMBER(4), Rue VARCHAR2(20), Code_Postal NUMBER(5), Ville VARCHAR2(20), quartier VARCHAR2(20), ORDER MEMBER FUNCTION compAdresse (adr IN adresse2_t) RETURN NUMBER, PRAGMA RESTRICT_REFERENCES (compAdresse, WNDS, WNPS, RNPS, RNDS) );

Page

27

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Comparaison dADT
Exemple avec la mthode ORDER MEMBER
CREATE OR REPLACE TYPE BODY adresse2_t AS ORDER MEMBER FUNCTION compAdresse (adr IN adresse2_t ) RETURN NUMBER IS position1 NUMBER :=0; position2 NUMBER :=0; concAdr1 VARCHAR2(60) := SELF.ville||SELF.rue||SELF.numero; concAdr2 VARCHAR2(60) := adr.ville|| adr.rue|| adr.numero; BEGIN CASE SELF.quartier WHEN Nord THEN position1 := 1; WHEN Centre THEN position1 := 2; WHEN Sud THEN position1 := 3; WHEN Est THEN position1 := 4; WHEN Ouest THEN position1 := 5; END CASE; CASE adr.quartier WHEN Nord THEN position2 := 1; WHEN Centre THEN position2 := 2; WHEN Sud THEN position2 := 3; WHEN Est THEN position2 := 4; WHEN Ouest THEN position2 := 5; END CASE;

Page

28

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Comparaison dADT
Exemple avec la mthode ORDER MEMBER
concAdr1 := position1||concAdr1; concAdr2 := position2|| concAdr2; IF concAdr1 = ConcAdr2 THEN return 0; ELSIF concAdr1 > ConcAdr2 THEN return 1; ELSIF concAdr1 < ConcAdr2 THEN return -1; END IF; END; END; /

Page

29

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Comparaison dADT
Exemple avec la mthode ORDER MEMBER
CREATE TABLE adresse2_table(adr adresse2_t ); INSERT INTO adresse2_table VALUES ( adresse2_t(1, rue du congres, 6000, Nice, Centre)); INSERT INTO adresse2_table VALUES ( adresse2_t(3, rue du congres, 6000, Nice, Centre)); INSERT INTO adresse2_table VALUES( adresse2_t(2, rue des garages, 6100, Nice, Nord)); INSERT INTO adresse2_table VALUES( adresse2_t(2, rue du port, 6300, Nice, Ouest)); SQL> SELECT * FROM adresse2_table; ADR(NUMERO, RUE, CODE_POSTAL, VILLE) ADRESSE2_T(1, rue du congres, 6000, Nice, Centre) ADRESSE2_T(3, rue du congres, 6000, Nice, Centre) ADRESSE2_T(2, rue des garages, 6100, Nice, Nord) ADRESSE2_T(2, rue du port, 6300, Nice, Ouest) SQL> SELECT * FROM adresse2_table order by adr; ADR(NUMERO, RUE, CODE_POSTAL, VILLE) ADRESSE2_T(2, rue des garages, 6100, Nice, Nord) ADRESSE2_T(1, rue du congres, 6000, Nice, Centre) ADRESSE2_T(3, rue du congres, 6000, Nice, Centre) ADRESSE2_T(2, rue du port, 6300, Nice, Ouest)

Page

30

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Complment sur les Types Abstraits Oracle


Les privilges sur les types sont :
CREATE TYPE (permet de crer, supprimer, modifier, hriter d un type, excuter les mthodes d un type) CREATE ANY TYPE. ALTER ANY TYPE. DROP ANY TYPE. UNDER ANY TYPE (droit d hriter dans tout schma) UNDER ANY VIEW EXECUTE ANY TYPE EXECUTE (privilge objet) UNDER (privilge objet)

La fonction IS NULL permet de tester si la rfrence vers un ADT est null ou pas La fontion IS DANGLING permet de vrifier si une rfrence pointe vers un objet dtruit. L indexation d attributs d ADT est possibles s' ils sont accessibles et ne sont ni des VARRAYs, ni des LOBs, ni des NESTED TABLES.
31

Page

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Modification dun ADT


La modification d' type permet : de un Recompiler le type en cas de modifications, d' ajouter de nouvelles mthodes au Type Syntaxe ALTER TYPE nomType COMPILE {SPECIFICATION | BODY} | REPLACE AS OBJECT listeElements | alter_methode_definition | alter_attribute_definition
OPTION
COMPILE REPLACE

DESCRIPTION
Compilation du corps et/ou de la spcification d' type un Ajout de nouvelles mthodes un type

Page

32

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Modification dun ADT


L option compile
Exemple SQL> ALTER TYPE adresse_t COMPILE;

L option REPLACE AS OBJECT listeElements


Syntaxe ListeElements ::=
nomAttribut1 typeAttribut1, nomAttributN typeAttributN, {MAP|ORDER} MEMBER specDeFonctions, MEMBER specDeFonction1, MEMBER specDeFonctionN, PRAGMA RESTRICT_REFERENCES( {nomMethode, {RNDS,WNDS,RNPS,WNPS}})

Notes
Ajout de nouvelles mthodes uniquement La structure entire du type doit tre reprise

Page

33

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Modification dun ADT


L option REPLACE AS OBJECT listeElements
Exemple
CREATE OR REPLACE TYPE adresse3_t AS OBJECT( Numero NUMBER(4), Rue VARCHAR2(20), Code_Postal NUMBER(5), Ville VARCHAR2(20), ORDER MEMBER FUNCTION compAdresse (adr IN adresse3_t) RETURN NUMBER, PRAGMA RESTRICT_REFERENCES (compAdresse, WNDS, WNPS, RNPS, RNDS)); ALTER TYPE adresse3_t REPLACE AS OBJECT( Numero NUMBER(4), Rue VARCHAR2(20), Code_Postal NUMBER(5), Ville VARCHAR2(20), ORDER MEMBER FUNCTION compAdresse (adr IN adresse3_t) RETURN NUMBER, PRAGMA RESTRICT_REFERENCES (compAdresse, WNDS, WNPS, RNPS, RNDS), Member function setRue(self IN OUT adresse3_t, nom_rue IN varchar2) return boolean );

Page

34

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Modification dun ADT


L option ajout / suppression de mthodes
Syntaxe
alter_methode_definition::= {ADD | DROP} {map_order_function_spec | subprogram_clauses} Exemple 1 : ajout Alter type adresse3_t add Member function setNumero(self IN OUT adresse3_t, numero1 IN number) return boolean; Exemple 2 : suppression Alter type adresse3_t drop member function setNumero (self IN OUT adresse3_t, numero1 IN number) return boolean;

Page

35

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Modification dun ADT


Loption ajout / modification / suppression dattributs
Syntaxe alter_attribute_definition::= {ADD | MODIFY} ATTRIBUTE attribute datatype [( attribute datatype, ...)] DROP ATTRIBUTE attribute [( attribute, ...)] Exemple 1 : ajout Alter type adresse3_t add attribute state varchar2(20); Alter type adresse3_t add attribute(state2 varchar2(20)); Exemple 2 : Modification Alter type adresse3_t modify attribute state2 varchar2(30); Exemple 3 : Suppression Alter type adresse3_t drop attribute state2;

Page

36

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Modification dun ADT


Les options INVALIDATE et CASCADE. Sil y a des dpendances, la modification dun type nest possibles quen utilisant les options INVALIDATE et CASCADE.
Loption CASCADE permet de propager immdiatement la modification sur les objets dpendants. Loption INVALIDATE permet dinvalider provisoirement tous les objets dpendants. Au prochain accs les objets sont nouveau valid. ATTENTION !!! Il faut tre sr des consquences Exemple
Create table adresse3 of adresse3_t; Insert into adresse3 values(1, rue de la gare, 6560, Valbonne, AM); Alter type adresse3_t modify attribute state varchar2(30) * ERREUR la ligne 1 : ORA-22312: vous devez indiquer l' option CASCADE ou INVALIDATE
37

Page

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Modification dun ADT


Les options INVALIDATE et CASCADE. Sil y a des dpendances, la modification dun type nest possibles quen utilisant les options INVALIDATE et CASCADE.
Exemple 1 : Modification avec INVALIDATE
Alter type adresse3_t modify attribute state varchar2(30) invalidate; Insert into adresse3 values(2, rue de la gare, 6560, Nice, AM);

Exemple 3 : Modification avec CASCADE


Alter type adresse3_t add attribute(state2 varchar2(20)) cascade; Insert into adresse3 values(2, rue de la gare, 6560, Nice, AM,AM);

Loption CASCADE peut tre suivi de INCLUDING DATA ou NOT INCLUDING DATA : avec ou sans conversion de donnes des tables. INCLUDING DATA est loption par dfaut
Page

38

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Modification dun ADT


Limites
Il nest pas possible de supprimer :
Un attribut dun super type dans un sous-type Un attribut dpendant sans loption cascade ou invalidate Un attribut utilis comme cl primaire ou cl de partitionnement

Il nest pas possible de modifier :


La taille dun attribut participant un Index bas sur une fonction, un domaine index ou une cl cluster

Page

39

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Suppression dun ADT


Il est possible de supprimer un type ou le corps dun type. La suppression du corps d' type permet d' un viter de supprimer la spcification du type. Syntaxe pour suppression d' type un DROP TYPE nomType [FORCE | VALIDATE]
L' option FORCE permet de supprimer un type en ignorant les dpendances. Les colonnes ou les attributs dfinis sur ce type deviennent invalide. L option VALIDATE permet de vrifier que des instances des super types n ont pas ts construits avec le sous-type Exemple
DROP TYPE adresse_t; DROP TYPE adresse_t FORCE; DROP TYPE Employee_t VALIDATE;

Syntaxe pour la suppression du corps d' type un DROP TYPE BODY nomType ;
Exemple
DROP TYPE BODY adresse_t;

Page

40

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Visualisation des informations sur les ADT


DESCRIPTION Informations sur les types

NOM DE LA VUE ALL_TYPES DBA_TYPES USER_TYPES ALL_COLL_TYPES DBA_COLL_TYPES USER_COLL_TYPES ALL_TYPE_ATTRS DBA_TYPE_ATTRS USER_TYPE_ATTRS ALL_TYPE_METHODS DBA_TYPE_METHODS USER_TYPE_METHODS

Informations sur les types collections

Informations sur les attributs dun type

Informations sur les mthodes d' un type

Page

41

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Visualisation des informations sur les ADT


DESCRIPTION Infos sur les index dfinis par le user

NOM DE LA VUE USER_INDEXTYPES USER_INDEXTYPES USER_INDEXTYPES

Commentaire sur les index dfinis (au sens nouveau mcanisme d indexation) par le user USER_INDEXTYPE_COMMENTS USER_INDEXTYPE_COMMENTS USER_INDEXTYPE_COMMENTS Information sur l oprateur d un index dfini par l utilisateur USER_INDEXTYPE_OPERATORS USER_INDEXTYPE_OPERATORS USER_INDEXTYPE_OPERATORS

Page

42

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Visualisation des informations sur les ADT


SQL> desc user_types
TYPE_NAME TYPE_OID TYPECODE ATTRIBUTES METHODS PREDEFINED INCOMPLETE FINAL INSTANTIABLE SUPERTYPE_OWNER SUPERTYPE_NAME LOCAL_ATTRIBUTES LOCAL_METHODS TYPEID

Page

43

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Visualisation des informations sur les ADT

1. Liste des types crs par l' utilisateur courant sql>select type_name, type_oid, attributes, methods, local_attributes from user_types;
TYPE_NAME TYPE_OID ATTRIBUTES METHODS ADRESSE2_T A73CC5B2852F418E89136F467DA27C77 4 1 ADRESSE3_T 17E3DBF26849423EB0F6F44CFF2C5EE7 6 2 ADRESSE_T E1F25E99482849E49A9B6AF3A10C2A03 4 0 PILOTE_T 0B930966561E4FF8B8140663F78A9960 6 0 REF_PILOTE_T AB2360EC8BEC4F1EBFE81D0E5F270559 6 3

2. Liste des attributs des types crs par l' utilisateur courant
SQL> SELECT type_name, attr_name, attr_type_name FROM user_type_attrs; TYPE_NAME ADRESSE2_T ADRESSE2_T ADRESSE2_T ADRESSE2_T ADRESSE3_T

ATTR_NAME NUMERO RUE CODE_POSTAL VILLE NUMERO

ATTR_TYPE_NAME NUMBER VARCHAR2 NUMBER VARCHAR2 NUMBER

Page

44

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Encapsulation
L' encapsulation est le principe qui consiste considrer un objet comme une BOITE NOIRE ACCESSIBLE UNIQUEMENT A TRAVERS LES OPERATIONS DEFINIES sur celle -ci L' Encapsulation en C++ par exemple est gre travers trois mots cls : PRIVATE, PROTECTED et PUBLIC Le moteur Oracle ne supporte pas l' encapsulation telle que dfinie. C' au programmeur de se limiter est l' appel de mthodes

DONNEES

METHODES

Page

45

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Constructeur
Un Constructeur est une mthode spciale ayant le mme nom que le type. Le constructeur du type ADRESSE_T sappelle ADRESSE_T. un constructeur sert la cration et la mise jour des objets (dans les ordres SQL : INSERT, UPDATE, dans des fonctions PL/SQL). Un Constructeur en Oracle est appelable partout ou une mthode peut tre appele Un constructeur par dfaut est disponible. Ses paramtres sont lensemble des champs du type L utilisateur peut BRICOLER constructeurs via des Mthodes (jusqu la version 8) ses propres STATIQUES

Page

46

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Constructeur
Exemple : constructeur par dfaut
Soit la table objet Pilote de pilote_t:
CREATE TABLE o_pilote OF ref_pilote_t; // Insertion d un lement de la table objet. Pour la colonne, le // Constructeur adresse_t sera appel INSERT INTO o_pilote VALUES ( ref_pilote_t(1, Jean DUPOND, adresse_t(1, rue Arago,6000, NICE), 0493825084, 12-JUN-47, 12000.50) ); NOTE : lappel de ref_PILOTE_T() est facultatif

Modification via un constructeur UPDATE o_pilote op set op.adr = ref_adresse_t(5, ' de la traverse' rue ,6000, ' ) Nice' Note : - tous les champs doivent tre concerns - il est prfrable d' accder directement un champ ou via une une mthode ou un autre constructeur si la MAJ ne concerne pas la ligne entire,

Page

47

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Constructeur
Exemple : constructeur dfini par lutilisateur (jusqu la V8)
CREATE OR REPLACE TYPE adresse4_t AS OBJECT( Numero NUMBER(4), Rue VARCHAR2(20), Code_Postal NUMBER(5), Ville VARCHAR2(20), STATIC FUNCTION cons_adresse4_t(numero Number , rue VARCHAR2 ) RETURN Adresse4_t , ORDER MEMBER FUNCTION compAdresse (adr IN adresse4_t) RETURN NUMBER, PRAGMA RESTRICT_REFERENCES (compAdresse, WNDS, WNPS, RNPS, RNDS)); /

Page

48

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Constructeur
Exemple : constructeur dfini par lutilisateur(jusqu la V8)
create or replace type body adresse4_t is STATIC FUNCTION cons_adresse4_t(numero Number , rue VARCHAR2 ) RETURN Adresse4_t IS begin return adresse4_t(numero, rue, null, null); end; ORDER MEMBER FUNCTION compAdresse (adr IN adresse4_t) RETURN NUMBER is begin if self.numero<adr.numero then return -1; end if; if self.numero>adr.numero then return 1 ; end if; return 0; End; end; /

Page

49

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Constructeur
Exemple : constructeur lutilisateur(jusqu la V8) dfini par

declare adr1 adresse4_t:=adresse4_t(1, Alufa, 5000, Ifa); adr2 adresse4_t:=adresse4_t.cons_adresse4_t(1, Josoe); begin adr2.ville:= Jerusalem ; Adr2.code_postal :=10000; end; /

Page

50

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)


I

Instanciation
Il nest pas possible dinstancier un type abstrait sinon que dans une table ou dans un programme
Type PILOTE_T Attributs ou Champs PL# NOM ADRESSE TEL DNAISS SALAIRE Mthodes getSalaire setSalaire

PL# : 1 Nom : Tintin Milou Adresse : (1, R Arago , 6000 Bruxelles ) Tl : 0493825084 Dnaiss : 12-10-40 Salaire : 12000.0

PL# :2 Nom : Dupond Dupont Adresse : (1, R Gare , 75 Paris ) Tl : 0141825084 Dnaiss : 12-10-45 Salaire : 13200.0

CREATE TABLE r_pilote(pil PILOTE_T); Declare Begin End; /


Page

pil_var

PILOTE_T;

51

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

5. NOTION DIDENTITE
I

PLAN
Identit sur les tables Identit sur les vues Diffrences entre un OID et ROWID

Page

52

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

5. NOTION DIDENTITE
I

Identit sur les tables


Lors de l' insertion d' objet dans la base, un OID ou un Object Identifier lui est affect. Cest identifiant ne peut changer pendant la dure de vie de l' objet Seuls les objets des tables ou des vues objets sont identifis par des OID. Une table Objet est cre avec la commande CREATE TABLE . OF Le type rfrence REF permet de stocker des rfrences vers des objets (OID). Une rfrence permet de dfinir les liens entre objets

Attention! : les OID sont trs diffrents des ROWID!

Page

53

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

5. NOTION DIDENTITE
I

Identit sur les tables

Exemple : Manipulation des rfrences CREATE TABLE O_REF_PILOTE OF REF_PILOTE_T; CREATE TABLE ref_Vol ( Vol# NUMBER(4) PRIMARY KEY, VD VARCHAR2(20), VA VARCHAR2(20), Pilote REF ref_pilote_t); --type abstrait dfini pralablement

// Insertion en exploitant les astuces du langage SQL


INSERT INTO o_ref_pilote VALUES ( ref_pilote_t(2, ' Milou TINTIN' , adresse_t(12, ' nord'75000, ' rue , Paris' ' ), 0493825084'' , 11-AUG-63' , 10000.5)); INSERT INTO ref_vol SELECT 300, ' Paris'' , REF(px) , Nice' from o_ref_pilote px where px.nom = ' Milou TINTIN' ;

Page

54

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

5. NOTION DIDENTITE
I

Identit sur les tables

Exemple : Manipulation des rfrences et la clause RETURNING REF( ) INTO ... La clause RETURNING... REF( ) INTO permet, lors de linsertion dune ligne dans une table Objet de capturer la vole la rfrence vers cet Objet. L' intrt est la mise jour des liens. // Insertion d un pilote et d un vol dans un programme PL/SQL declare pil_ref REF ref_pilote_t :=null; Begin INSERT INTO o_ref_pilote op VALUES ( ref_pilote_t(1, ' Dupond' Jean , adresse_t(3, ' Arago'6000, ' rue , NICE' ' ), 0493825084' , ' 11-AUG-62'10000.5)) RETURNING ref(op) INTO pil_ref; , INSERT INTO ref_vol values(400, ' Paris'' , Nice'pil_ref); , end; /

Page

55

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

5. NOTION DIDENTITE
I

Identit sur les vues


A l image des tables, deux types de vues sont introduites en Oracle objet :
Les vues normales (relationnelles) et les vues dites objets

Les vues objets possdent des identifiants physiques appels Primary key OID (pseudo OID) avec leur pendant la manipulation Primary key REF (pseudo REF) les vues objets servent entre autre crer des OID sur les tables relationnelles classiques !!! Note: voir chap. 10 pour plus de dtails sur les vues

Page

56

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

5. NOTION DIDENTITE
I

Identit sur les vues


Syntaxe de cration d' vue object une CREATE OR REPLACE [FORCE] VIEW nomVue OF nomTypeObjet WITH OBJECT IDENTIFIER [DEFAULT | (attribut1, attribut2, )] AS sousRequte

Mots et paramtres OF nomTypeObjet

Description cration d' vue objet sur le type une nomTypeObjet permet de spcifier la ou les colonnes utilises comme cl pour identifier de faon unique les lignes de la vue objet. Cette clause est obligatoire s' il s' d' vue sur une table objet agit une ou une vue objet.

WITH OBJECT IDENTIFIER

Page

57

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

5. NOTION DIDENTITE
I

Identit sur les vues


Description attributs permettant didentifier de faon unique une vue indique que l' identification d' objets de la vue s' appuie sur les OID de la table objet ou vue objet sousjascente

Mots et paramtres Attribut1, attribut2, ... DEFAULT

NOTES : - les attributs Attribut1, Attribut2, sont la cls primaire de la table sous-jascente

Page

58

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

5. NOTION DIDENTITE
I

Identit sur les vues

Exemple :
CREATE table Pilote1 ( PL# NUMBER(4) CONSTRAINT pk_pilote1 PRIMARY KEY, nom VARCHAR2(12), adresse adresse_t,-- type abstrait dfini pralablement Tel VARCHAR2(12), dnaiss DATE, salaire NUMBER(7,2)); // cration du type Ville_pil_t CREATE OR REPLACE TYPE Ville_pil_t AS OBJECT( plnum NUMBER(4), nom CHAR(20), ville CHAR(20)); CREATE OR REPLACE VIEW Ville_pil_v OF Ville_pil_t WITH OBJECT IDENTIFIER(plnum) AS -- liste de colonnes assurant l unicit de la cl select p.Pl#, p.nom, p.adresse.ville from Pilote1 p;

Page

59

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

5. NOTION DIDENTITE
I

Identit sur les vues

Exemple : INSERT INTO pilote1 VALUES (5, Milou TINTIN, adresse_t(15, Av Mars, 75000, CAP), 0493825084, 11/08/64, 15000.5);

SQL> SELECT * FROM ville_pil_v; PLNUM 4 5 NOM Milou TINTIN Milou TINTIN VILLE Cap Cap

SQL> SELECT REF(v) FROM ville_pil_v v; REF(V) 000050030A004CAA966C70AF1111D2A64700A0245FEFFD00000 01426010001000100290000000000090604002A0007000000 200200000000000000001602C105000000000000000000000000000 00000000000 000050030A004CAA966C70AF1111D2A64700A0245FEFFD00000 01426010001000100290000000000090604002A0007000000 200200000000000000001602C106000000000000000000000000000 00000000000

Page

60

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

5. NOTION DIDENTITE
I

Diffrence entre un OID et un ROWID


Critre Taille ROWID 10 OID 16 OUI NON OUI

identifiant immuable NON Sert indexer partage d' objets OUI NON

SQL> SELECT REF(op), ROWID FROM o_ref_pilote op; REF(OP) ROWID 000028020985B3AD5BB8C04D39BF81C8DB5573EFE53AFC0C48 6CA3447283858183F28672A6020001 B20000 AAAIFzAAIAAAAGyAAA 0000280209A36782FB22EE44409D6560943CFD7A433AFC0C486 CA3447283858183F28672A6020001 B20001 AAAIFzAAIAAAAGyAAB
Page

61

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

6. NOTION DE COLLECTION
I

PLAN
Gnralits Les tableaux variables (VARRAY) Les tables imbriques (Nested Table) Indexation dune Nested Table Stockage dune Nested Table Mthodes sur les Collections Comparaison entre VARRAY et Nested Table

Page

62

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

6. NOTION DE COLLECTION
I

Gnralits
Deux types de collections :
- Les tableaux de longueur variable (VARRAY) ANSI SQL. - Ensemble Multiple ou Bag (Nested Table) ANSI standard.

Une collection peut contenir :


- Des types de donnes lmentaires. - Des types de donnes abstraits. - Des rfrences vers des types de donnes abstraits.

Page

63

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

6. NOTION DE COLLECTION
I

Les tableaux variables (VARRAY)


Dfinition dun VARRAY
Un varying ARRAY est un ensemble dlments ordonns de mme type. Chaque lment a une valeur et occupe une position unique.

Syntaxe
CREATE [OR REPLACE ] TYPE nomType AS {VARRAY | VARYING ARRAY} (nombreMaxDlments) OF typeDeDonnes

Page

64

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

6. NOTION DE COLLECTION
I

Les tableaux variables (VARRAY)

Exemple de Cration d' VARRAY un


CREATE TYPE avion_t as object ( Av# NUMBER(4), AvType VARCHAR2(45), Loc VARCHAR2(20), Cap NUMBER(4)); / CREATE TYPE avions_t AS VARRAY (5) OF avion_t ; -- Cration d' table contenant un VARRAY une -- Chaque colonne avions est un tableau de 5 lments de avions_t CREATE TABLE hangar ( hangar# NUMBER(2) , avions AVIONS_T);

Page

65

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

6. NOTION DE COLLECTION
I

Les tableaux variables (VARRAY)

Exemple dinsertion dans une table avec un VARRAY


INSERT INTO hangar VALUES (1, avions_t (avion_t ( 1, AIRBUS, NICE,300) )) ; INSERT INTO hangar VALUES (2, avions_t (avion_t ( 2, AIRBUS, PARIS,320))) ; INSERT INTO hangar VALUES (3, avions_t (avion_t ( 3, AIRBUS, PARIS,320), avion_t ( 5, AIRBUS, PARIS,320))) ;

Exemple de consultation dune table avec un VARRAY


SQL>SELECT * FROM hangar;

HANGAR# AVIONS(AV#, AVTYPE, LOC, CAP) 1 AVIONS_T(AVION_T(1, AIRBUS, NICE, 300)) 2 AVIONS_T(AVION_T(2, AIRBUS, NICE, 300)) 3 AVIONS_T(AVION_T(3, AIRBUS, NICE, 300), avion_t ( 5, AIRBUS, PARIS,320))
Mise jour d' VARRAY. un UPDATE hangar SET avions =avions_t(avion_t ( 4, CARAVELLE,PARIS,320)) WHERE hangar#=2 ;
Page

66

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

6. NOTION DE COLLECTION
I

Les tableaux variables (VARRAY)


Quelques contraintes et informations :
- Le stockage d un VARRAY se fait l intrieur de la table ou il a t dclar - si un VARRAY est trop grand, il peut tre stock en dehors du segment de la table - Un constructeur d objet existe aussi sur un type VARRAY - dans les Ordres SQL (UPDATE, INSERT, DELETE), un VARRAY est manipulable comme un TOUT - La mise jour d' lment particulier est possible un dans PL/SQL

Page

67

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

6. NOTION DE COLLECTION
I

Les tables imbriques (Nested Table)


Dfinition dune nested table (bag ou set)
Les nested tables sont des tables imbriques efficaces pour la gestion des relations matre-dtail.

Caractristiques
Une Nested Table peut tre un champ, un attribut, une variable ou un paramtre dont le type de donne est un type table . Les Store Tables sont des segments physiques o sont stocks les instances des Nested Tables

Page

68

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

6. NOTION DE COLLECTION
I

Les tables imbriques (Nested Table)


Reprsentation schmatique
PL# PLNOM ADR Tlphone Salaire 1 Tintin @1 012222111 10000.0 2 Zembla @2 5551111 23000.0 3 Bleck @3 222222 12500.0 4 Dragon bol @... 233399 15000.0

@1 Nested_table_id Numro Rue Code Postal Ville @1 60 r. du Congrs 06100 Nice

@2 @2 15 av. Gare 075002 Paris

@1

@3

@1 @3 47 25 BD Dessaline Square des iles 75014 Port au Prince Paris

STORE TABLE : segment associ la table imbrique

Page

69

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

6. NOTION DE COLLECTION
I

Les tables imbriques (Nested Table)


Cration d' type Table un CREATE OR REPLACE TYPE nomType AS TABLE OF typeDesElements Exemple
-- Cration d un type table sur le type vol_t CREATE OR REPLACE TYPE ref_Vol2_t AS OBJECT ( Vol# NUMBER(4), VD VARCHAR2(20), VA VARCHAR2(20), Pilote REF ref_pilote_t); --type abstrait dfini pralablement CREATE OR REPLACE TYPE REF vol2_set_t AS TABLE OF REF ref_vol2_t ; .

Page

70

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

6. NOTION DE COLLECTION
I

Les tables imbriques (Nested Table)


Utilisation d' type TABLE un
un CHAMP d' type ou une COLONNE d' table un une peuvent tre instance d' type TABLE un

-- Utilisation du type table VOL2_SET_T CREATE OR REPLACE TYPE Avion2_ns_t AS OBJECT( Av_num NUMBER(3), Av_type VARCHAR2(12), Av_loc VARCHAR2(20), Av_cap NUMBER(3), Av_rem CLOB, Av_liste_vol Vol2_set_t) ;

NOTE : dans ce modle un VOL n' existe que parce qu' ya un il PILOTE.

Page

71

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

6. NOTION DE COLLECTION
I

Les tables imbriques (Nested Table)


Cration d' STORE TABLE pour stocker les une objets dune table imbrique. Une STORE TABLE est une table dont l' accs aux LIGNES se fait uniquement travers la table qui la contient. Exemple
-- Table non Objet avec Table imbrique CREATE TABLE Avion2_ns ( Av_num NUMBER(3), Av_type VARCHAR2(12), Av_loc VARCHAR2(20), Av_cap NUMBER(3), Av_rem CLOB, Av_liste_vol Vol2_set_t) NESTED TABLE av_liste_vol STORE AS storeVols2Set; -- Table objet avec Table imbrique. CREATE TABLE avion2_ns OF Avion2_ns_t NESTED TABLE Av_liste_vol STORE AS vols2_set ;

Page

72

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

6. NOTION DE COLLECTION
I

Les tables imbriques (Nested Table) : CARACTERISTIQUES


ces tables sont accessibles indirectement que via un SELECT, UPDATE, INSERT Oracle tend le relationnel au niveau domaine (EF Codd) Un TYPE TABLE est ncessaire pour crer une NESTED TABLE Il peut tre utilis comme type de donnes dans les dclarations suivantes : colonne SQL, attribut d' ADT, variable, paramtre ou rsultat en PL/SQL.

Page

73

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

6. NOTION DE COLLECTION
I

Les tables imbriques (Nested Table)


Un constructeur par dfaut est fourni pour construire les objets d' NESTED TABLE, il doit une tre du mme type :
- du mme nom que le type de la table. - retourne une table dont les lments sont une liste de valeurs (la valeur NULL est permise). - appel sans argument pour construire une table vide.
Exemple CREATE OR REPLACE TYPE Avion3_t AS OBJECT ( Av_num NUMBER(3), Av_type VARCHAR2(12), Av_loc VARCHAR2(20), Av_cap NUMBER(3), Av_rem CLOB); CREATE OR REPLACE TYPE avion3_set_t AS TABLE OF avion3_t ;

Page

74

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

6. NOTION DE COLLECTION
I

Les tables imbriques (Nested Table)


Exemple (suite) -- Cration d' table avec une colonne de type table une CREATE TABLE hangar3 ( hangar# number(2), avions avion3_set_t) NESTED TABLE avions STORE AS store_avion3_set ; -- insertion dans la table hangar3 INSERT INTO hangar3 VALUES (1,avion3_set_t()) ; -- modification de la table hangar3 UPDATE hangar3 h SET -- hangar est la table dfinie pralablement. h.avions = avion3_set_t (avion3_t (1, ' AIRBUS'' , NICE' ,300, null) ) WHERE h.hangar# = 1 ; -- consultation de la table hangar3 SELECT t1.av_num, t1.av_type, t1.av_loc, t1.av_cap FROM table(SELECT avions FROM hangar3 WHERE hangar#=1) t1; AV_NUM AV_TYPE 1 AIRBUS AV_LOC NICE AV_CAP 300

Page

75

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

6. NOTION DE COLLECTION
I

Les tables imbriques (Nested Table)


Afin d' viter les duplications, il est ncessaire de stocker les rfrences dans une Nested Table. Ce qui n' pas le cas ici car il ya duplication des AVIONS. est
EXEMPLE CREATE TABLE avion3s OF avion3_t; INSERT INTO AVION3S VALUES (avion3_t (1, AIRBUS, NICE,300, null) ); INSERT INTO hangar3 VALUES (2, avion3_set_t( avion3_t (2, CARAVELLE, NICE,300, null) )) ; -- consultation de la table Avion3s. SELECT * FROM avion3s; AV_NUM AV_TYPE 1 AIRBUS AV_LOC NICE AV_CAP AV_REM 300

SELECT avions FROM hangar3; AVIONS(AV_NUM, AV_TYPE, AV_LOC, AV_CAP, AV_REM) AVION3_SET_T(AVION3_T(1, AIRBUS, NICE, 300, NULL)) AVION3_SET_T(AVION3_T(2, CARAVELLE, NICE, 300, NULL))
Page

76

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

6. NOTION DE COLLECTION
I

Indexation dune Nested Table


Les lments associs un objet par exemple <la liste des avions dans un Hangar ou la liste des vols d' un Pilote >lorsqu' sont modliss travers des Nested ils Tables, sont stocks de faon non ordonne et non contige dans la STORE TABLE de la Nested Table Il est donc utile de poser des index sur les colonnes de la Nested Table afin d' acclrer l' en accs Une colonne implicite NESTED_TABLE_ID permet d' identifier les lments de la Nested Table ayant un mme parent. Un identifiant UNIQUE pour la Nested Table peut tre obtenu en crant un INDEX CONCATENE qui inclu la colonne Nested_table_Id et d' autres colonnes

Page

77

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

6. NOTION DE COLLECTION
I

Indexation dune Nested Table


Cration d' index sur la COLONNE implicite un NESTED_TABLE_ID de la NESTED TABLE "Avions"de la table HANGAR3.
CREATE INDEX IDX_STORE_AVION3_SET ON STORE_AVION3_SET(NESTED_TABLE_ID);

Cration d' index unique sur une Nested Table un


CREATE UNIQUE INDEX IDX_UNIQUE_STORE_AVION3_SET ON STORE_AVION3_SET(nested_table_id, av_type);

Page

78

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

6. NOTION DE COLLECTION
I

Stockage dune Nested Table


Une Nested Table est stocke dans un segment de donnes spar de celui de la table qui le contient Il n' pas possible de localiser une Nested Table est dans un TABLESPACE indpendant. Mais on peut lui assigner ses propres paramtres de stockage

Exemple
ALTER TABLE store_avion3_set STORAGE (initial 10K next 10K pctincrease 0); CREATE TABLE hangar4 ( hangar# number(2), avions avion3_set_t)
TABLESPACE TOOLS NESTED TABLE avions STORE AS store_avion4_set STORAGE ( initial 10 next 14K);
Page

79

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

6. NOTION DE COLLECTION
I

Mthodes sur les collections


Nom EXISTS (n) COUNT LIMIT FIRST and LAST PRIOR and NEXT EXTEND(n[,i]) TRIM(n) DELETE(m[, n]) Description rend vrai si n-ime lment existe nombre d' lments courants nombre maximum d' lments rend l' index du 1er ou dernier lment rend l' index de l' lment prcdent ou suivant ajout de n lments NULL ou n lments recopis partir de i supprime n lment partir de la fin d' collection une supprime m lments entre m et n

Page

80

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

6. NOTION DE COLLECTION
I

Mthodes sur les collections


Exemples depuis PL/SQL
IF listVols.EXISTS(i) THEN listVols(i) := nouveau_vol; IF (arrayAvions.COUNT + 20) < arrayAvions.LIMIT THEN -- ajouter 20 lments FOR i IN listVols.FIRST.. listVols.LAST LOOP projects(i) := projects.PRIOR(projects.NEXT(i)); -- affectation de l' lment i listVols.EXTEND(5,1);--ajout de 5 lm. recopis partir de 1 listVols.DELETE(2); --suppression de l' lment 2 listVols.DELETE(3,6);--suppression de l' lment 3 l' lment 6 arrayAvions.DELETE; --suppression de tous les lments

Page

81

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

6. NOTION DE COLLECTION
I

Mthodes sur les collections


Accs aux lements d un VARRAY Partir de PL/SQL BEGIN DECLARE lav avions_t; i number :=1; BEGIN SELECT avions INTO lav FROM hangar where hangar#=2; dbms_output.put_line(COUNT= || lav.count || LIMIT = || lav.limit); LOOP -- dbms_output.put_line (AVION [ || i || ] = || lav(i)); dbms_output.put_line (lav(i).av# || || lav(i).avtype); lav.av#=20; update hangar set avions=lav where hangar#=2; IF i = lav.count THEN exit; i := i + 1; END IF; END LOOP; END; END; /

Page

82

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

6. NOTION DE COLLECTION
I

Comparaison entre VARRAYS et NESTED TABLE


Nested Table Se comporte comme un ensemble Stocke dans des segments physiques diffrents

VARRAYs Collection ordonne Stock dans le mme segment que le contenu de la table ou dans un segment spar

N autorise pas les indexes Autorise les indexes Adapt pour un nombre limit de donnes Adapte pour un nombre illimit de donnes

Page

83

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

7. CREATION ET MANIPULATION DOBJETS


I

PLAN
Gnralits Cration et manipulation des tables objets Insertion dans une table objet Consultation dune table objet Mise jour dans une table objet Contraintes dintgrit dans les tables objets Les nouveaux Oprateurs DML Les nouvelles Extensions DML

Page

84

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

7. CREATION ET MANIPULATION DOBJETS


I

Gnralits
Oracle propose partir d' Oracle V8 deux types de tables : les tables Objets et les tables relationnelles traditionnelles Les tables objets sont identifies par les OID et les ROWID, les tables Relationnelles sont identifies uniquement par les ROWID De nouveaux oprateurs et mots cls(TABLE, REF, CAST, MULTICAST, RETURNING, ) sont introduits pour faciliter la manipulation des objets

Page

85

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

7. CREATION ET MANIPULATION DOBJETS


I

Cration et manipulation des tables objets


Dfinition
Une table objet est une table dont les objets (lignes) ont chacun un identifiant (OID) unique et immuable.

Cration dune table Objet


La cration d une table objet se fait l aide de la commande CREATE TABLE OF TYPE Exemple : CREATE OR REPLACE TYPE Pilote4_t AS OBJECT ( PL# NUMBER(4), nom VARCHAR2(12), adresse ADRESSE_T, Tel VARCHAR2(12), dnaiss DATE, salaire NUMBER(7,2)); -- adresse_t type abstrait dfini pralablement CREATE TABLE o_pilote4 OF pilote4_t ;

Page

86

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

7. CREATION ET MANIPULATION DOBJETS


I

Cration et manipulation des tables objets


Cration dune table Objet
Contre exemple
CREATE TABLE r_pilote4 ( p pilote4_t ); -- la colonne p est un attribut de type pilote4_t Mais r_pilote 4 n est pas une table objet.

Page

87

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

7. CREATION ET MANIPULATION DOBJETS


I

Insertion dune table objet


L insertion se fait avec la commande INSERT INTO . VALUES avec ensuite application du constructeur Exemple :
INSERT INTO o_pilote4 VALUES ( pilote4_t(1, Jean DUPOND, adresse_t(1, rue Arago,6000, NICE), 0493825084, 12-JUN-47, 12000.50) ); Note : linsertion dans la table non objet r_pilote sera faite de la mme faon

INSERT INTO r_pilote4 VALUES ( pilote4_t(1, ' Alain DURAND' , adresse_t(1, ' Traverse des Brucs' ,6560, ' VALBONNE' ), ' 0493825096'' , 12-JUN-57'16000.50) ); ,

Page

88

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

7. CREATION ET MANIPULATION DOBJETS


I

Consultation dune table objet


La consultation se fait avec la commande SELECT * FROM . WHERE Exemple SELECT nom, adresse FROM o_pilote4 WHERE nom = ' DUPOND' Jean ;
NOM ADRESSE(NUMERO, RUE, CODE_POSTAL,VILLE)

Jean DUPOND ADRESSE_T(1, rue Arago, 6000, NICE) -- consultation dune table relationnelle avec type complexe

Select r.p.nom,r.p.adresse From r_pilote4 r Where r.p.nom = Alain DURAND ;


P.NOM P.ADRESSE(NUMERO, RUE, CODE_POSTAL,VILLE) Alain DURAND ADRESSE_T(1, Traverse des Brucs, 6560, VALBONNE)

Page

89

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

7. CREATION ET MANIPULATION DOBJETS


I

Consultation dune table objet


Une table relationnelle ne contient pas d' OID la diffrence d' table Objet une Exemple SELECT rowid, ref(o), nom FROM o_pilote4 o WHERE o.nom = ' DUPOND' Jean ;
NOM REF(O) Jean DUPOND ROWID AAAAw/AAFAAAAJWAAA

00002802096ABAF6D9B23511D2A64E00A0245FEFFD6ABA F6D8B23511D2A64E00A0245FEFFD014002560000

Page

90

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

7. CREATION ET MANIPULATION DOBJETS


I

Consultation dune table objet


une table relationnelle ne contient pas d' OID la diffrence d' table Objet une Exemple : loprateur REF ne s' applique pas ici Select r.p.nom, rowid, ref(r ) From r_pilote4 r Where r.p.nom = ' Alain DURAND ;
ERROR at line 1: ORA-00904: invalid column name r

Select r.p.nom, rowid From r_pilote4 r Where r.p.nom = Alain DURAND ;


P.NOM Alain DURAND ROWID AAAAxBAAFAAAAJgAAA

Page

91

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

7. CREATION ET MANIPULATION DOBJETS


I

Mise jour d' table objet une


La commande utilise pour les mises jour est UPDATE SET [WHERE ]. Les Colonnes peuvent tre mises jour directement, travers des constructeurs ou travers des mthodes Exemple de maj sans utilisation de constructeurs
UPDATE o_pilote4 SET Tel = 0493825095 WHERE nom= Jean DUPOND ; UPDATE o_pilote4 o SET o.adresse.numero = 22 WHERE o.nom= Jean DUPOND ;

Page

92

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

7. CREATION ET MANIPULATION DOBJETS


I

Mise jour d' table objet une


Exemple de MAJ via un CONSTRUCTEUR
UPDATE o_pilote4 o SET o.adresse=adresse_t( 22,Mariner, 06555, Mt Doc) WHERE o.nom= Jean DUPOND ; SELECT o.nom, o.adresse.numero, o.adresse.rue FROM o_pilote4 o WHERE o.nom= Jean DUPOND; NOM ADRESSE.NUMERO ADRESSE.RUE Jean DUPOND 22 Mariner Note : lutilisation dun constructeur oblige renseigner tous les champs

Page

93

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

7. CREATION ET MANIPULATION DOBJETS


I

Contraintes dintgrit dans les tables objets


Les tables Objets supportent les constraintes dintgrits :
dentit : cl primaire de rfrence : cl trangre de domaine : NOT NULL, NULL, CHECK

Ces contraintes peuvent tre exprimes pendant la cration de la table ou pendant sa mise jour.
CREATE TABLE nomTableObjet OF nomType ( {{colonne | attribut} [DEFAULT expr] [contrainteDeNiveauColonne], ... | contrainteDeNiveauTable;}) ALTER TABLE nomTableObjet ADD ContrainteDeNiveauTable;

Page

94

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

7. CREATION ET MANIPULATION DOBJETS


I

Contraintes dintgrit dans les tables objets


Exemple de dfinition de contraintes lors de la cration d' table une
CREATE TABLE o_pilote5 OF pilote4_t( CONSTRAINT nl_nom nom NOT NULL, CONSTRAINT pk_o_pilote5 PRIMARY KEY(pl#), CONSTRAINT chk_dnaiss CHECK(dnaiss<to_date(12-OCT-1998, DDMON-YYYY)), CONSTRAINT chk_salaire CHECK (salaire >2000 AND Salaire<70000), CONSTRAINT nl_adresse adresse NOT NULL, CONSTRAINT nl_adresse_rue CHECK(adresse.rue IS NOT NULL) ); NOTE : Il nest pas possible de poser des contraintes au niveau TYPE

Page

95

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

7. CREATION ET MANIPULATION DOBJETS


I

Les Nouveaux Oprateurs DML


Oracle propose de nouveaux oprateurs tels que THE, TABLE, VALUE, CAST, MAKE_REF, MULTISET, REF, DEREF, REFTOHEX, TREAT, IS OF TYPE, SYS_TYPEID, ..., pour manipuler des objets complexes Les oprateur CAST, MULTISET seront traits dans le chapitre sur les liens d association L oprateur MAKE_REF est trait dans le chapitre sur les vues Les oprateurs TREAT, IS OF TYPE , SYS_TYPEID seront traits dans le chapitre sur l hritage

Note :
l' oprateur THE est devenu Obsolte, Utiliser TABLE la place

Page

96

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

7. CREATION ET MANIPULATION DOBJETS


I

Les Nouveaux Oprateurs DML


L oprateur VALUE
Cet oprateur permet d accder la VALEUR d un objet cr via une TABLE OBJET. Exemple
INSERT INTO r_pilote4 -- table non objet SELECT VALUE (p) FROM o_pilote4 p -- table objet WHERE p.nom LIKE %DUPOND%; -- consultation de la table non objet r_pilote4 SELECT rp.p.nom, rp.p.adresse.ville FROM r_pilote4 rp where rp.p.nom like %DUPOND%; P.NOM P.ADRESSE.VILLE Jean DUPOND Mt Doc

Page

97

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

7. CREATION ET MANIPULATION DOBJETS


I

Les Nouveaux Oprateurs DML


L oprateur REF
Loprateur REF permet de connatre lidentit de lobjet rfrenc. Exemple
SELECT REF (px) FROM o_pilote4 px -- table objet WHERE px.nom = Jean DUPOND; PX 0000280209E4715187332C11D1A51300A0245FEFFDE47 15186332C11D1A51300A0245FEFFD0140010C0000

Page

98

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

7. CREATION ET MANIPULATION DOBJETS


I

Les Nouveaux Oprateurs DML


L oprateur DEREF
Retourne la valeur de l objet identifi par la rfrence. Exemple :
-- Cration de la table vol4 CREATE TABLE Vol4 ( Vol# VD VA Pilote

NUMBER(4) PRIMARY KEY, VARCHAR2(20), VARCHAR2(20), REF pilote4_t);

INSERT INTO vol4 SELECT 200, ' PARIS'' , TOULOUSE'REF(p) , FROM o_pilote4 p WHERE p.nom =' DUPOND' Jean ;

Page

99

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

7. CREATION ET MANIPULATION DOBJETS


I

Les Nouveaux Oprateurs DML


L oprateur DEREF
Exemple (suite) :
-- Drfrencement d' rfrence une SELECT DEREF (Pilote) FROM Vol4 WHERE VD = ' PARIS' ;

DEREF(PILOTE)(PL#, NOM, ADRESSE(NUMERO, RUE, CODE_POSTAL, VILLE), TEL, DNAISS, SALAIRE) PILOTE4_T(1, Jean DUPOND, ADRESSE_T(22, Mariner, 6555, Mt Doc), 0493825095, 12-JUN-47, 12001)

Page

100

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

7. CREATION ET MANIPULATION DOBJETS


I

Nouvelles Extensions DML


Lextension RETURNING REF( ) INTO ...
Rcupre la rfrence dun nouvel enregistrement lors dune insertion dans une table objet. Ne peut tre utilis que dans une instruction INSERT et ne doit renvoyer qu une seule valeur Exemple
-- Insertion d un pilote et d un vol dans un programme PL/SQL declare pil_ref REF pilote4_t; Begin INSERT INTO o_pilote4 op VALUES ( pilote4_t(3, ' ADAMS'adresse_t(3, ' du Port' Jean , rue ,6000, ' NICE' ' ), 0493825033'' , 12-AUG-64'10000.5)) , RETURNING REF(op) INTO pil_ref; INSERT INTO vol4 VALUES (400, ' Paris'' , pil_ref) ; , Nice' end; /

Page

101

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

7. CREATION ET MANIPULATION DOBJETS


I

Nouvelles Extensions DML


Loprateur REFTOHEX
Permet de convertir explicitement une rfrence en une chane Hexadcimale Exemple
Select pilote from vol4; PILOTE 00002202085793DF953AEE494F96D4165C98E440 A32DC775DDC8F54618A57420A774CDCACC Select REFTOHEX(pilote) from vol4; REFTOHEX(PILOTE) 00002202085793DF953AEE494F96D4165C98E440 A32DC775DDC8F54618A57420A774CDCACC

Page

102

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

7. CREATION ET MANIPULATION DOBJETS


I

Informations sur les tables objets et les Nested Tables


ALL_OBJECT_TABLES DBA_OBJECT_TABLES USER_OBJECT_TABLES ALL_NESTED_TABLES DBA_NESTED_TABLES USER_NESTED_TABLES

Page

103

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

8. LIENS DASSOCIATIONS
I

PLAN
Gnralits Gestion des liens dassociations Via les rfrences Dfinition des contraintes d' intgrits Limitation de la visibilit des Rfrences (SCOPE FOR) Insertion travers les liens Mise jour travers les liens Consultation travers les liens Suppression travers les liens Suppression dans une Nested table contenant des rfrences Autres considrations

Page

104

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

8. LIENS DASSOCIATIONS
I

Gnralits
D un point de vue conceptuel, un lien d association entre deux ENTITES est une relation (de type 1:N ou N:M) entre les instances de ces deux ENTITES. La mise en oeuvre des liens d' associations se fait travers la notion de Rfrence Peuvent tre qualifis de jointure cable Peuvent tre poss au niveau table ou au niveau Type Doivent tre entirement grs par le dveloppeur

Page

105

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

8. LIENS DASSOCIATIONS
I

Gestion des liens dassociations Via des rferences


-- Dclaration Forward des Types afin d' viter l' interblocage d au refrencement mutuel entre types
CREATE OR REPLACE TYPE VOL6_T;

/ --Cration de type table (liste de vol) : Les lments de cette liste sont des rfrences vers des vols.
Create or replace type refVol_t as object( refVol REF VOL6_T ) /

CREATE OR REPLACE TYPE SET_VOL6_T AS TABLE OF refVol_t /

Ou bien
CREATE OR REPLACE TYPE SET_VOL6_T AS TABLE OF REF VOL6_T /

NOTE : - La colonne implicite COLUMN_VALUE d une Collection permet de manipuler les lments de la liste.

Page

106

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

8. LIENS DASSOCIATIONS
I

Gestion des liens dassociations Via des rfrences


--Cration du type PILOTE6_T avec un champ multivalu Pil_Liste_vols
CREATE OR REPLACE TYPE Pilote6_t AS OBJECT ( PL# NUMBER(4), nom VARCHAR2(12), adresse adresse_t, Tel VARCHAR2(12), dnaiss DATE, salaire number(7,2), PIL_liste_vols Set_Vol6_t) /

--Cration du type AVION6_T avec un champ multivalu Av_Liste_vols


CREATE OR REPLACE TYPE Avion6_t AS OBJECT( Av# NUMBER(3), Av_type VARCHAR2(12), Av_loc VARCHAR2(20), Av_cap NUMBER(3), Av_rem CLOB, Av_liste_vols Set_Vol6_t) /

Page

107

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

8. LIENS DASSOCIATIONS
I

Gestion des liens dassociations Via des rferences


--Cration du type VOL6_T avec 2 champs de type REF
CREATE OR REPLACE TYPE Vol6_t AS OBJECT( Vol# NUMBER(4), Pilote# NUMBER(4), Avion# NUMBER(4), VD VARCHAR2(20), VA VARCHAR2(20), refPilote REF pilote6_t, refAvion REF avion6_t ) /

Page

108

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

8. LIENS DASSOCIATIONS
I

Dfinition des contraintes d' intgrits


La Dfinition des contraintes d' intgrit d' Entit, de Rfrence et de domaine reste possible Exemple
CREATE TABLE PILOTE6 OF PILOTE6_T( CONSTRAINT pk_pilote6 pl# PRIMARY KEY, CONSTRAINT chk_salaire6 CHECK (salaire >2000 AND Salaire<70000) ) NESTED TABLE Pil_liste_vols STORE AS store_pil_liste_vols; CREATE TABLE AVION6 OF AVION6_T( CONSTRAINT pk_avion6 av# PRIMARY KEY ) NESTED TABLE av_liste_vols STORE AS store_av_liste_vols;

Page

109

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

8. LIENS DASSOCIATIONS
I

Dfinition des contraintes d' intgrits


Exemple
CREATE TABLE VOL6 OF VOL6_T( CONSTRAINT pk_vol6 VOL# PRIMARY KEY, CONSTRAINT fk_pilote6 FOREIGN KEY (Pilote#) REFERENCES Pilote6, CONSTRAINT fk_avion6 FOREIGN KEY (Avion#) REFERENCES AVION6 );

Page

110

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

8. LIENS DASSOCIATIONS
I

Limitation de la visibilit des Rfrences (SCOPE FOR) et cration de tables


Le mot cl SCOPE FOR permet de limiter la visibilit des rfrences une table particulire. On peut aussi parler d' intgrit de REFERENCE sur les REFs La taille d' rfrence limite via SCOPE FOR est une de 16 Octets. Au lieu de 42 pour un REF normal
ALTER TABLE STORE_AV_LISTE_VOLS ADD (SCOPE FOR (column_value) IS VOL6); ALTER TABLE STORE_PIL_LISTE_VOLS ADD (SCOPE FOR (column_value) IS VOL6); ALTER TABLE VOL6 ADD (SCOPE FOR (refPilote) IS PILOTE6); ALTER TABLE VOL6 ADD (SCOPE FOR (refAvion) IS AVION6);

Page

111

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

8. LIENS DASSOCIATIONS
I

Insertion travers les liens


Insertion dans la table objet PILOTE6
INSERT INTO PILOTE6 VALUES ( pilote6_t( 1, Jean DUPOND, adresse_t(1, rue Arago,6000, NICE), 0493825084, 12-JUN-47, 12000.50, set_vol6_t()) ); INSERT INTO PILOTE6 VALUES ( pilote6_t( 2, Milou TINTIN, adresse_t(1, rue de la Gare,6000, Bruxelles), 0493825084, 12-JUN-47, 12000.50, set_vol6_t()) );

Page

112

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

8. LIENS DASSOCIATIONS
I

Insertion travers les liens


Insertion dans la table objet AVION6
INSERT INTO AVION6 VALUES ( AVION6_t(1,AIRBUS, Nice,300, null, set_vol6_t())) ; INSERT INTO AVION6 VALUES ( AVION6_t(2,Caravelle, Paris,130, null, set_vol6_t())) ; INSERT INTO AVION6 VALUES ( AVION6_t(3,DC10, Paris,300, null, set_vol6_t())) ;

Page

113

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

8. LIENS DASSOCIATIONS
I

Insertion travers les liens


Insertion dans la table objet VOL6
-- Approche 1: Insertion suivie dune MAJ INSERT INTO VOL6 SELECT 300, 1,1, Paris, Nice, REF(px), null FROM pilote6 px WHERE px.pl# = 1; UPDATE VOL6 SET refAvion = (SELECT REF(av) FROM avion6 av WHERE av.av#=1) WHERE vol#=300;

Page

114

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

8. LIENS DASSOCIATIONS
I

Insertion travers les liens


Insertion dans la table objet VOL6
-- Approche 2 : insertion seule

INSERT INTO VOL6 SELECT 350,1, 2, Nice, Lille, REF(px), REF(ax) FROM pilote6 px, Avion6 ax WHERE px.pl# =1 AND ax.av# =2; INSERT INTO VOL6 SELECT 450, 2, 1, Nice, Lille, REF(px), REF(ax) FROM pilote6 px, Avion6 ax WHERE px.pl# = 2 AND ax.av#=1;

Page

115

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

8. LIENS DASSOCIATIONS
I

Insertion travers les liens


Insertion dans la Nested Table PIL_LISTES_VOL
INSERT INTO TABLE(SELECT p.Pil_liste_vols FROM pilote6 p WHERE p.pl# = 1) SELECT REF(v) FROM Vol6 v WHERE pilote# = 1;--refPilote.pl#=1 Note : le Pilote Nr. 1 assure 2 VOLS INSERT INTO TABLE(SELECT p.Pil_liste_vols FROM pilote6 p WHERE p.pl# = 2) lvols SELECT REF(v) FROM Vol6 v WHERE pilote# = 2;

Page

116

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

8. LIENS DASSOCIATIONS
I

Insertion travers les liens


Insertion dans la Nested Table AV_LISTES_VOL
INSERT INTO TABLE(SELECT a.av_liste_vols FROM avion6 a WHERE a.av# = 1) SELECT REF(v) FROM Vol6 v WHERE v.avion# = 1;

Page

117

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

8. LIENS DASSOCIATIONS
I

Insertion travers les liens


Insertion partir d' programme un PL/SQL
declare refavion refpilote listVol1 listVol2 refVol1 refVol2 BEGIN refVol1 := null; INSERT INTO AVION6 av VALUES ( AVION6_t(4,A320, Nice,320, null, set_vol6_t())) RETURNING REF(av) INTO refavion; REF avion6_t:=NULL; REF pilote6_t:=NULL; set_vol6_t; set_vol6_t; REF vol6_t; REF vol6_t;

Page

118

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

8. LIENS DASSOCIATIONS
I

Insertion travers les liens


Insertion partir d' programme PL/SQL un
INSERT INTO PILOTE6 pil VALUES ( pilote6_t( 3, Jean DUPOND, adresse_t(15, rue du nil,13000, Marseille), 0491825084, 12-JUN-45, 12001.50, set_vol6_t()) ) RETURNING REF(pil) INTO refpilote;

INSERT INTO VOL6 v VALUES(550,3,4, Nice, Lille, refpilote, refavion) RETURNING ref(v) INTO refVol1; INSERT INTO VOL6 v VALUES(650,3,4, Nice, Lille, refpilote, refavion) RETURNING ref(v) INTO refVol2;

Page

119

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

8. LIENS DASSOCIATIONS
I

Insertion travers les liens


Insertion partir d' programme PL/SQL un

-- insertion en sappuyant sur la cl trangre INSERT INTO TABLE(SELECT a.av_liste_vols FROM avion6 a WHERE a.av# = 4) SELECT REF(v) FROM Vol6 v WHERE v.avion# = 4; -- insertion connaissant les rfrences insrer INSERT INTO TABLE(SELECT a.av_liste_vols FROM avion6 a WHERE a.av# = 4) values(refvol1); INSERT INTO TABLE(SELECT a.av_liste_vols FROM avion6 a WHERE a.av# = 4) values(refvol2); -- insertion connaissant un pilote travers le lien INSERT INTO TABLE(SELECT p.Pil_liste_vols FROM pilote6 p WHERE p.pl# = 3) lvols SELECT REF(v) FROM Vol6 v WHERE v.refPilote.pl# = 3; END; /

Page

120

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

8. LIENS DASSOCIATIONS
I

Suppression travers les liens


Soient deux entits E1 et E2 associes travers un lien 1:N ou, une occurrence Oe1 de E1 est associe N occurrences Oe2i de E2 (i : 0 N) La suppression travers un lien consiste assurer l' intgrit de donnes. Lors de la suppression de Oe1 par exemple, tous les Oe2i associs seront supprims NOTE : la gestion des liens doit, pour une plus grande efficacit, tre prise en compte travers des mthodes

Page

121

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

8. LIENS DASSOCIATIONS
I

Suppression travers les liens


Supprimer la rfrence au VOL 650 dans liste des vols dun pilote donn connaissant son numro
DECLARE refvol1 numpil numavion BEGIN DELETE FROM VOL6 V6 WHERE vol# = 650 RETURNING REF(v6), pilote# , avion# INTO refvol1, numpil, numavion; DELETE FROM TABLE( SELECT p6.pil_liste_vols FROM pilote6 p6 WHERE p6.pl#=numpil ) listvols WHERE listvols.column_value = refvol1; END; / NOTE : On aura pu supprimer directement cet lment REF VOL6_T; NUMBER(4); NUMBER(4);

Page

122

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

8. LIENS DASSOCIATIONS
I

Suppression travers les liens


Exemple :Suppression du Pilote numro 2 et ses vols. Declare listVols i BEGIN SELECT p6.pil_liste_vols INTO listVols FROM pilote6 p6 WHERE p6.pl#=2; FOR i IN 1.. listVols.COUNT LOOP DELETE FROM VOL6 v WHERE REF(v) = listVols(i); END LOOP; DELETE FROM pilote6 WHERE pl# = 2; END; / SET_VOL6_T; INTEGER;

Page

123

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

8. LIENS DASSOCIATIONS
I

Suppression dans une Nested Table contenant des REFERENCEs


Loprateur IS [NOT] DANGLING permet d' identifier les rfrences qui ne pointent plus vers un objet. Exemple
suppression de toutes les rfrences au VOLs supprims du PILOTE Nr. 2 DELETE FROM TABLE(SELECT p6.pil_liste_vols FROM pilote6 p6 WHERE p6.pl#=2) listvols WHERE listvols.column_value IS DANGLING ;

Page

124

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

8. LIENS DASSOCIATIONS
I

Consultation travers les liens


Donner le numro du vol, le nom du pilote et le type d' avion du Vol 550
SELECT v6.vol#, v6.refpilote.nom, v6.refavion.av_type FROM vol6 v6 WHERE v6.vol#=550; VOL# 550 PILOTE.NOM Jean DUPOND AVION.AV_TYPE A320

Informations sur lavion participant au VOL 550


SELECT DEREF(v6.refAvion) FROM VOL6 v6 WHERE vol#=550; DEREF(V6.AVION)(AV#, AV_TYPE, AV_LOC, AV_CAP, AV_REM, AV_LISTE_VOLS(REF_VOL6)) AVION6_T(4, A320, Nice, 320, NULL, SET_VOL6_T(REF_VOL6_T(0000220208692CD9E1B36411 D2A65000A0245FEFFD692CD9C3B36411D2A65000A0245F EFFD), REF_VOL6_T(0000220208692CD9E2B36411D2A65000A024 5FEFFD692CD9C3B36411D2A65000A0245FEFFD)))

Page

125

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

8. LIENS DASSOCIATIONS
I

Consultation travers les liens


Donner la liste des vols dun Pilote connaissant son numro et son nom. SELECT v.column_value.vol#, v.column_value.pilote# FROM TABLE(SELECT p6.pil_liste_vols FROM pilote6 p6 WHERE p6.pl#= 3 and p6.nom=Jean DUPOND) v;
REF_VOL6.VOL# 550 650 REF_VOL6.PILOTE# 3 3

SELECT p6.pil_liste_vols(1).vol# FROM pilote6 p6 WHERE p6.pl#= 3 AND p6.nom=Jean DUPOND;


* ERROR at line 1: ORA-00923: FROM keyword not found where expected

Page

126

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

8. LIENS DASSOCIATIONS
I

Consultation travers les liens


Quelsques oprateurs sur les Nested Table
Loprateur CURSOR permet de spcifier un ensemble d' objets issus d' Nested Table une Loprteur TABLE permet d' indiquer qu' une colonne de type Nested Table est une Table. Joue aussi le role de l' ancien THE aujourd' hui CAST( MULTISET ( <requte> ) AS nested_type ) permet de transformer une "requte" en une nested table .

Page

127

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

8. LIENS DASSOCIATIONS
I

Consultation travers les liens


Donner la liste des vols de chaque Pilote. En utilisant les oprateurs CURSOR et TABLE
SELECT CURSOR( SELECT p6.nom, v.column_value.vol#, v.column_value.pilote# FROM TABLE (p6.pil_liste_vols) v) FROM pilote6 p6;

CURSOR(SELECTP6.NOM, CURSOR STATEMENT : 1 CURSOR STATEMENT : 1 NOM REF_VOL6.VOL# REF_VOL6.PILOTE# Jean DUPOND 300 1 Jean DUPOND 350 1 CURSOR STATEMENT : 1 CURSOR STATEMENT : 1 NOM REF_VOL6.VOL# REF_VOL6.PILOTE# Milou TINTIN 450 2 NOM REF_VOL6.VOL# REF_VOL6.PILOTE# Jean DUPOND 550 3 Jean DUPOND 650 3
Page

128

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

8. LIENS DASSOCIATIONS
I

Consultation travers les liens


Donner la liste des rfrences de vols d' Pilote un connaissant son numro. En utilisant les oprateurs CAST et Multiset
SELECT CAST ( MULTISET( SELECT REF(v) FROM vol6 v WHERE v.pilote# IN (1,2) ) AS SET_VOL6_T ) FROM dual;

CAST(MULTISET(SELECTREF(V)FROMVOL6VWHEREV.PILOTE #IN(1,2))ASSET_VOL6_T)(REF_VOL6) SET_VOL6_T(REF_VOL6_T(0000280209692CD9CEB36411D2A65000 A0245FEFFD692CD9C3B36411D2A65000A0245FEFFD014002B000 00), REF_VOL6_T(0000280209692CD9CFB36411D2A65000A0245EFFD692 CD9C3B36411D2A65000A0245FEFFD014002B00001), REF_VOL6_T(0000280209692CD9D0B36411D2A65000A0245FEFFD69 2CD9C3B36411D2A65000A0245FEFFD014002B00002))

Page

129

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

8. LIENS DASSOCIATIONS
I

Consultation travers les liens


CAST et MULTSET peuvent tre utilss en insertion INSERT INTO PILOTE6 SELECT pilote6_t(
4, GAGARIN, adresse_t(1, rue Arago,6000, NICE), 0493825084, 12-JUN-47, 12000.50, CAST (MULTISET( SELECT REF(v) FROM VOL6 v WHERE v.pilote#=4 )AS set_vol6_t ) ) FROM dual;

Page

130

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

8. LIENS DASSOCIATIONS
I

Autres Considrations
la gestion des liens dassociations via les rfrences en s' appuyant sur REF et les Nested Tables "devrait" favoriser les performances dans un contexte navigationnel il sagit dune sorte dimplmentation de la jointure si on connecte deux tables par l' galit la programmation dapplications objets est mieux adapte dans un langage L3G plutt que SQL seul

Page

131

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

9. Lien dhritage
I

PLAN
Gnralits Les sous-types Surcharge des mthodes et des attributs Types non instanciables Les types et les mthodes finales Conversion de types Les nouveaux oprateurs lis lhritage

Page

132

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

9. Lien dhritage
I

Gnralits
Soit deux types A et B, on dit que A hrite de B, ssi l' ensemble des caractristiques statiques et dynamiques de B sont aussi implicitement celles de A. On dit aussi que A est un fils de B ou que B est pre de A. LHritage est le mcanisme de transmission des proprits dun type vers les types drivs. Oracle supporte depuis la version 9, lhritage simple

Page

133

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

9. Lien dhritage
I

Les sous-types
Syntaxe
CREATE OR REPLACE TYPE nomType UNDER superType ( [inheritanceClauses] {sousProgammeClause | MapOrderClause } ) [{[NOT] FINAL] | [[NOT] INSTANCIABLE]}] Mot cl Description UNDER Pour indiquer le type pre inheritanceClauses Proprits d hritage au niveau des fonctions et des procdures FINAL Type ne pouvant plus tre tendu (pas de sous-types) INSTANCIABLE Type pouvant avoir des instances

Page

134

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

9. Lien dhritage
I

Les sous-types
Exemple de cration dun sous-type
CREATE OR REPLACE TYPE Personne_t AS OBJECT( numInsee varchar2(30), nom varchar2(20), Prenom varchar2(20), DateNaiss date, MEMBER PROCEDURE afficher ) NOT FINAL; / CREATE OR REPLACE TYPE Employee_t UNDER Personne_t ( salaire number(7,2) ); / NOTE :
Si l option NOT FINAL n est pas prcis, le type est FINAL. On ne peut pas crer des sous-types partir de lui

Page

135

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

9. Lien dhritage
I

Surcharge des mthodes


La surcharge permet de dfinir plusieurs mthodes ayant un mme nom mais offrant des comportements diffrents Exemple
CREATE OR REPLACE TYPE Position as OBJECT( x number(5,2), y number(5,2) ); / CREATE OR REPLACE TYPE Employee_t UNDER Personne_t ( salaire number(7,2), MEMBER PROCEDURE setSalaire(sal IN number), MEMBER PROCEDURE setSalaire(sal IN varchar2), MEMBER PROCEDURE afficher(coord position) ); /

Page

136

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

9. Lien dhritage
I

Redfinition des mthodes


Le mot cl [NOT ] OVERRIDING permet de contrler la redfinition dune mthode dun type au niveau dun de ses sous-types Exemple
CREATE OR REPLACE TYPE Employee2_t UNDER Personne_t ( salaire number(7,2), OVERRIDING MEMBER PROCEDURE afficher ); /

Limites de la redfinition
On ne peut redfinir une mthode finale Les mthodes MAP et ORDER ne peuvent tre redfini Une mthode statique dun sous-type ne peut redfinir une mthode du type pre Une mthode membre dun sous-type ne peut redfinir une mthode statique du type pre Le prototype de la mthode dans le sous-type doit tre quivalent celui de la mthode au niveau du type pre

Page

137

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

9. Lien dhritage
I

Types non instanciables


Le mot cl [NOT] INSTANTIABLE permet de dfinir lquivalent dune mthode abstraite ou dune classe Abstraite en Java. Une mthode de ce genre na pas de corps elle doit tre redfinie dans les types fils Si un type a une mthode NOT INSTANTIABLE, il doit tre NOT INSTANTIABLE et NOT FINAL Exemple de dfinition dun type et dune mthode non instanciable
CREATE OR REPLACE TYPE FIGURE_T AS OBJECT( x number(4), y number(4), NOT INSTANTIABLE MEMBER FUNCTION surface RETURN NUMBER, MEMBER PROCEDURE deplacer(x1 IN NUMBER, y1 IN NUMBER) ) NOT INSTANTIABLE NOT FINAL;

Page

138

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

9. Lien dhritage
I

Types non instanciables


Exemple de dfinition dun type et dune mthode partir dun type non instanciable
CREATE OR REPLACE TYPE CERCLE_T UNDER FIGURE_T ( rayon NUMBER(4), OVERRIDING MEMBER FUNCTION surface RETURN NUMBER ); CREATE OR REPLACE TYPE BODY CERCLE_T IS OVERRIDING MEMBER FUNCTION surface RETURN NUMBER IS BEGIN RETURN rayon*rayon; END;

END; /

Page

139

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

9. Lien dhritage
I

Conversion de types
A limage des systmes objets, une instance dun sous-type peut apparatre partout ou une instance dun type pre apparat. Exemple
CREATE TABLE o_personne of personne_t; INSERT INTO o_personne VALUES(personne_t(122222, Dong, Jing Tong, 10/10/82)); INSERT INTO o_personne VALUES(employee_t(222222, Dong, Fei Fei, 10/10/90,10000.0)); Select * from o_personne;

Page

140

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

9. Lien dhritage
I

Conversion de types
Limitation des conversions implicites
Lors de la cration il est possible dinterdire toute substitution
CREATE TABLE o_personne2 OF personne_t NOT SUBSTITUTABLE AT ALL LEVELS;

Il est possible de limiter la substitution sur certains TYPE


CREATE TABLE o_personne3 OF personne_t IS OF ( EMPLOYEE_T );

Autre cas : Un employ est forcement une personne Exemple declare pers1 Personne_t := personne_t(' 122222' , ' Dong , ' Tong'' Jing , 10/10/82' );; emp1 Employee_t:= employee_t(' 222222' , ' Dong'' Fei'' , Fei , 10/10/90' ,10000.0); begin pers1 := emp1; end;

Page

141

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

9. Lien dhritage
I

Les nouveaux oprateurs lis l hritage


Certains nouveaux oprateurs ou fonctions sont introduits avec lhritage : IS OF type, SYS_TYPEID, TREAT IS OF type permet de dterminer si un objet est dun type donn
Select value(op) FROM o_personne op Where value(op) is of (employee_t); VALUE(OP)(NUMINSEE, NOM, PRENOM, DATENAISS) -----------------------------------------------------------EMPLOYEE_T(222222, Dong, Fei Fei, 10/10/90, 10000)

Page

142

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

9. Lien dhritage
I

Les nouveaux oprateurs lis l hritage


SYS_TYPEID : permet de renvoyer lidentifiant du type exacte dune instance
SELECT op.nom, SYS_TYPEID(VALUE(op)) TYPE_ID FROM o_personne op NOM TYPE_ID Dong 01 Dong 02

TREAT permet de convertir le type dune expression en un type donn. Il est par exemple possible de convertir les instances dun type de base en des instances de ses sous-type
SELECT TREAT(value(op) as employee_t) FROM o_personne op; TREAT(VALUE(OP)ASEMPLOYEE_T)(NUMINSEE, NOM, PRENOM, DATENAISS, SALAIRE) EMPLOYEE_T(222222, Dong, Fei Fei, 10/10/90, 10000)

Page

143

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

10. LES VUES


I

PLAN
Gnralits Les Types de vues Cration et manipulation de vues normales Cration et manipulation de vues objets Loprateur MAKE_REF Le TRIGGER INSTEAD OFF

Page

144

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

10. LES VUES


I

Gnralits
Les vues sont des objets dfinis partir des tables existantes et/ou des ADTs. Elles permettent :
de masquer la complexit d une requte, d augmenter la scurit des tables de base de masquer des informations certains utilisateurs

Les avantages des vues sont les suivants :


- Accs aux donnes relationnelles par les applications Orientes Objets (O.O). - Coexistence entre applications relationnelles et applications O.O . - Intgration des tables de la V7 dans la V8 ou plus. - Plusieurs applications peuvent tre bases sur la mme table, chaque application utilisant une vue de la table rpondant ses besoins.

Page

145

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

10. LES VUES


I

Les types de vues


On distingue 2 types de vues, dfinies sur les tables (objets, relationnelles) ou autres vues (objets, relationnelles) :
vue relationnelle : une vue relationnelle est une vue construite sur les colonnes dune table relationnelle, objet ou sur dautres vues

vue objet : une vue objet est une "table objet virtuelle" dont les instances sont identifies par des OID. Les colonnes d' telle vue sont dfinies sur une un type de l' utilisateur

Page

146

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

10. LES VUES


I

Les types de vues


rprsentation schmatique

VUE OBJET VUE OBJET

VUE RELATIONNELLE VUE RELATIONNELLE

TABLE RELATIONNELLE TABLE RELATIONNELLE

TABLE OBJET TABLE OBJET

Une VUE XXX peut tre construite partir de ...

Page

147

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

10. LES VUES


I

Cration et manipulation de vues relationnelles


Une vue relationnelle peut tre construite sur : une vue relationnelle, une vue objet, une table relationnelle ou une table objet. A la diffrence d' vue Objet, elle ne une possde pas d' OID Exemple de cration d' vue relationnelle partir une d' table relationnelle une
CREATE TABLE rpilote7 ( PL# NUMBER(4), nom VARCHAR2(12), adresse adresse_t, Tel VARCHAR2(12), dnaiss DATE, salaire NUMBER(7,2), PIL_liste_vols2 Set_Vol6_t) NESTED TABLE pil_liste_vols2 STORE AS store_pil_liste_vols2;

Page

148

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

10. LES VUES


I

Cration et manipulation de vues relationnelles


Exemple de cration d' vue relationnelle partir une d' TABLE relationnelle une
CREATE OR REPLACE VIEW pilote_v (plnum, plnom, adresse, tel) AS SELECT Pl#, nom, adresse, Tel FROM rpilote7 ;

Exemple de cration d' vue relationnelle partir une d' TABLE OBJET une CREATE OR REPLACE VIEW v_pilote6_nice AS SELECT * FROM pilote6 p6 WHERE p6.adresse.ville =' NICE' ; NOTE : pilote6 est une table objet mais pas la vue v_pilote6_nice
Page

149

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

10. LES VUES


I

Cration et manipulation de vues OBJETS


Syntaxe de cration d' vue object une CREATE OR REPLACE [FORCE] VIEW nomVue OF nomTypeObjet WITH OBJECT IDENTIFIER [DEFAULT | (attribut1, attribut2, )] AS sousRequte
Mots et paramtres OF nomTypeObjet Description cration d' vue objet sur le type une nomTypeObjet permet de spcifier la ou les colonnes utilises comme cl pour identifier de faon unique les lignes de la vue objet. Cette clause est obligatoire s' s' il agit d' vue sur une table objet ou une vue une objet.

WITH OBJECT IDENTIFIER

Page

150

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

10. LES VUES


I

Cration et manipulation de vues OBJETS


Cration d' vue objet partir d' table une une relationnelle.
L' objectif est de pouvoir faire cohabiter les applications relationnelles existantes et les nouvelles applications Objets Exemple
-Create table relationnelle RPILOTE8 CREATE TABLE rpilote8( pl# NUMBER(4) , nom CHAR(20), tel CHAR(20), adresse adresse_t, dnaiss DATE);

Page

151

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

10. LES VUES


I

Cration et manipulation de vues OBJETS


Cration d' vue objet partir d' table une une relationnelle
Exemple (suite)
-- cration du type r_pilote_t CREATE TYPE r_pilote_t as object(
pl# nom tel adresse dnaiss NUMBER(4) , CHAR(20), CHAR(20), adresse_t, DATE)

/ -- cration de la vue sur les pilotes CREATE OR REPLACE VIEW o_view_pilote OF r_pilote_t WITH OBJECT IDENTIFIER(pl#) AS SELECT rp.* FROM rPilote8 rp;

Page

152

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

10. LES VUES


I

Cration et manipulation de vues OBJETS


Cration d' vue objet partir d' table une une OBJET
Exemple
-- cration de la vue sur pilotes partir d une table Objet CREATE OR REPLACE VIEW o_view_pilote2 OF r_pilote_t WITH OBJECT IDENTIFIER DEFAULT AS SELECT op.pl#, op.nom, op.tel, op.adresse, op.dnaiss FROM pilote6 op;

NOTE : PILOTE6 est une table Objet

Page

153

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

10. LES VUES


I

Cration et manipulation de vues OBJETS


Remarque sur les vues objets
l' permet de rfrencer les lignes accessibles OID travers la vue un index unique doit tre associ aux colonnes jouant le rle d' identifiant pour les tables relationnelles ALTER TABLE rpilote8 ADD CONSTRAINT pk_rpilote8 PRIMARY KEY(pl#);

Page

154

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

10. LES VUES


I

Cration et manipulation de vues OBJETS


Consultation travers une vue objet
INSERT INTO RPILOTE8 VALUES ( 2, Milou TINTIN, 0493825084, adresse_t(1, rue de la Gare,6000, Bruxelles), 12-JUN-47);

SELECT op.plnum, op.nom, op.adr.ville FROM o_view_pilote op; PLNUM 2 NOM Milou TINTIN VILLE Bruxelles

SELECT REF(vp) FROM o_view_pilote vp; REF(VP) 000050030A004CEB0BF16DB42911D2A65100A0245FE FFD0000001426010001000100290000000000090604002A 0007000000200200000000000000001602C1030000000000 0000000000000000000000000000
Page

155

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

10. LES VUES


I

Loprateur MAKE_REF
Loprateur MAKE_REF rend une rfrence vers une ligne d' vue objet si la ligne existe. Dans le cas une contraire rend la prochaine rfrence libre. Il est ncessaire de passer MAKE_REF le nom de la vue et les valeurs des colonnes cls. Syntaxe MAKE_REF (nomVueObjet, key[key, ]) Exemple 1 SELECT MAKE_REF(o_view_pilote , 2) FROM dual; MAKE_REF(o_view_pilote ,2) 000050030A004CEB0BF16DB42911D2A65100A024 5FEFFD0000001426010001000100290000000000090 604002A0007000000200200000000000000001602C1 0300000000000000000000000000000000000000

Page

156

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

10. LES VUES


I

Loprateur MAKE_REF
Exemple 2 SELECT MAKE_REF(o_view_pilote , 3) FROM dual; MAKE_REF(o_view_pilote ,3) 000050030A004CEB0BF16DB42911D2A65100A024 5FEFFD0000001426010001000100290000000000090 604002A0007000000200200000000000000001602C1 0400000000000000000000000000000000000000 Si l' objet identifi par la cl existe c' la rfrence est existante qui est renvoye sinon, une nouvelle rfrence est attribue.

Page

157

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

10. LES VUES


I

Le trigger INSTEAD OF
Le trigger INSTEAD OF permet de mettre jour les tables sous-jascentes une vue Complexe. Ce qui ntait pas possible jusqu' la version 7 d' Oracle Le trigger INSTEAD OF est toujours excut la place de l' ordre SQL sous-jascent(INSERT, UPDATE, DELETE) Exemple
CREATE OR REPLACE TRIGGER tr_update_ville_pil_v INSTEAD OF INSERT ON o_view_pilote DECLARE adr BEGIN UPDATE RPILOTE8 r SET r.adresse.ville = :new.adresse.ville; END; adresse_t;

/
Page

158

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

11. SUPPORT DES OBJETS VOLUMINEUX


I

PLAN
Gnralits Les LOBs internes Les LOBs externes ou BFILE Les LOBs Locators Le Package DBMS_LOB Informations sur les LOBs Quelques considrations sur les LOBs Contraintes sur les LOBs

Page

159

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

11. 1 Gnralits
I

Les LOBs : Large Objects ont t introduits par Oracle depuis la version 8.0. Les LOBs sont adapts pour les applications multimdia On distingue deux classes de LOBs : les LOBs internes (CLOB pour Caractre LOB, NCLOB pour National Caractre LOB for the Data Base et BLOB pour Binary LOB) et les LOBs externes BFILEs Les LOBs vont se substituer progressivement aux LONG et LONG RAW La taille d' CLOB ou BLOB est de 4Go un max

Page

160

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

11. 1 Gnralits
I

Diffrnces entre LOB et LONG/LONG RAW


Les types LONG RAW ET LONG existent toujours mais les LOB offrent plus de fonctionalits Les LOBs offrent les avantages suivants :
Plusieurs colonnes de types LOBs dans une table sont possibles. Par contre un seul LONG/LONG RAW par table Les LOBS peuvent tre attributs d ADT Les LOBs stockent uniquement dans la table LE POINTEUR vers les emplacements des donnes (cellesci tant stockes dans un segment spar). Par contre, les LONGs stockent directement les donnes dans la table . Un LOB peut atteindre 4GO de taille alors qu' un LONG/LONG RAW est limit 2GO

Page

161

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

11. 1 Gnralits
I

Un LOB (objet gros) se dcompose en 3 parties


Data : Les donnes. emplacement qui indique l' endroit ou sont Locator :L' stockes les donnes. Handle :Un pointeur vers le locator. Le Package DBMS_LOB permet de manipuler les LOBs
PROGRAMME FAISANT APPEL PAR PROGRAMME FAISANT APPEL PAR REQUETE SQL A LA TABLES DES LOCATORS REQUETE SQL A LA TABLES DES LOCATORS

LOB DATA LOB DATA

Table contenant les LOB locator


Page

162

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

11. 2 Les LOB internes


I

Ce sont des LOB de type BLOB, CLOB ou NCLOB. Ils sont directement stocks dans la base AU CAS DANS UN SEGMENT SEPARE Un lob peut tre dfini comme tant : un attribut dun ADT, une colonne dune table, une variable SQL, une variable hte d' un programme, une variable PL/SQL, un paramtre ou un rsultat dune fonction Sa structure comprend :Une entte, Un bloc Bitmap Index (chainage), Des blocs Bitmap, Des blocs de donnes.

Page

163

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

11. 2 Les LOB internes


I

Exemple de cration de LOB


CREATE OR REPLACE
TYPE LPILOTE_T AS OBJECT( pl# nom dnaiss adr salaire cv_texte cv_anime ); CREATE TABLE LPILOTE OF LPILOTE_T( CONSTRAINT pk_lpilote PRIMARY KEY(pl#)) LOB (cv_texte, cv_anime) STORE AS (TABLESPACE tools STORAGE (NEXT 10K) DISABLE STORAGE IN ROW NUMBER(4), VARCHAR2(20), DATE, VARCHAR2(20), NUMBER(7,2), CLOB, BLOB

CHUNK 4);
Page

164

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

11. 2 Les LOB internes


I

Gestion du stockage des LOBs internes


Les LOBs et leur Index peuvent tre stocks dans des segments spars de celui de la table qui les contient Un Tablespace spar peut tre affect au LOB et / ou son Index. Par dfaut il rsident dans le mme tablespace que la table Si un tablespace S est associ un LOB mais pas son index, ce dernier rsidera dans S Plusieurs LOBs d' mme table peuvent tre une attachs un mme tablespace

Page

165

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

11. 2 Les LOB internes


I

Contrle du stockage des LOBs internes


Les paramtres PCTVERSION, CACHE, NOCACHE, LOGGING, NOLOGGING, CHUNK, ENABLE/ DISABLE STORAGE IN ROW permettent de contrler le stockage des LOBs PCTVERSION : vaut 10% par dfaut, espace rserv pour conserver les versions prcdentes des LOBs afin d' assurer la lecture CONSISTANTE. Le positionner 20% en cas de MAJ frquentes
SET PCTVERSION =20

CACHE/NO CACHE : CACHE permet conserver un LOB souvent accd en mmoire centrale LOGGING/NOLOGGING gnre ou non la trace dans le fichier REDO LOG
Page

166

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

11. 2 Les LOB internes


I

Contrle du stockage des LOBs internes


CHUNK : nombre de blocks lus ou crits d' coup un lors de l' appel des mthodes OCIlobWrite, OCIlobRead, DBMS_LOB.write ou DBMS_LOB.read
Note : Intitial et Next doivent tre suprieurs CHUNK

ENABLE (DISABLE) STORAGE IN ROW : autorise, lorsque les donnes d' LOB sont < 4Ko, un crire directement dans la ligne qui contient le LOB pour des raisons de PERFORMANCE NOTE : les paramtres TABLESPACE, ENABLE (DISABLE)STORAGE IN ROW, CHUNCK ne peuvent tre spcifis qu' la cration d' Table une

Page

167

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

11. 2 Les LOB internes


I

Contrle du stockage des LOBs internes


Exemple

ALTER TABLE LPILOTE MODIFY LOB (cv_texte) ( CACHE PCTVERSION 20 STORAGE (NEXT 10K) INDEX (STORAGE (next 12K )) );

Page

168

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

11. 2 Les LOB internes


I

Initialisation des LOBs internes


Lors d une insertion ou d une MAJ, un LOB interne peut tre initialis NULL ou VIDE L initialisation vide se fait travers l oprateur EMPTY_CLOB ou EMPTY_BLOB un LOB initialis NULL ne pourra tre manipul que s' a t mis vide il

Page

169

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

11. 2 Les LOB internes


I

Initialisation des LOBs internes


Exemple INSERT INTO LPILOTE VALUES (12, ' Guela'' , 12-DEC-70' , ' Cap'2000.0, EMPTY_CLOB(), NULL); Le , Il est possible de vrifier qu' LOB est positionn un NULL. UPDATE lpilote SET cv_anime = EMPTY_BLOB() WHERE pl#=12;

Page

170

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

11. 3 Les LOB externes


I

Le type BFILE (File Based LOB) spcifie que le LOB sera stock en dehors de la base de donnes Oracle. Le systme de fichiers dOracle garde en mmoire le chemin daccs de ce fichier. Les BFILE sont vus comme tant des donnes binaires

Page

171

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

11. 3 Les LOB externes


I

L objet DIRECTORY
Un nouvel objet appel DIRECTORY , permet ladministration des accs et la manipulation de fichiers. Il permet galement de grer toutes les utilisations des FILEs stocks sur le serveur Oracle. Les privilges autoriss pour l objet DIRECTORY sont : READ, WRITE, DELETE et CREATE DIRECTORY Syntaxe CREATE OR REPLACE DIRECTORY nomDirectory AS ' PathAvecNomFichier' ; NOTE : NomDirectory => nom du rpertoire dans la base

Page

172

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

11. 3 Les LOB externes


I

Voici les tapes pour installer des objets de type FILE et des objets DIRECTORY :
1. Crer le rpertoire sous l OS (en tant qu utilisateur oracle) et lui donner les accs. 2. Copier les fichiers l intrieur de ce rpertoire. 3. Crer la table oracle contenant le type BFILE. 4. Crer l objet DIRECTORY et lui donner les droits. 5. Insrer les rows de la table en associant le fichier OS.

Page

173

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

11. 3 Les LOB externes


I

Exemple :
1. Cration du rpertoire sous L' OS mkdir C:\ORA8DATA\DBCOUR\LOB\FILES\; 2. Copier le fichier dans ce rpertoire :
exemple ORACLEGAL3.DOC

3. Crer la table contenant le BFILE CREATE TABLE PROJET( PROJ# ProjNom ProjFile suivre NUMBER(4), VARCHAR2(20), BFILE);

Page

174

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

11. 3 Les LOB externes


I

Exemple :
4. Crer un objet DIRECTORY CREATE OR REPLACE DIRECTORY bfile_dir AS ' C:\ORA8DATA\DBCOUR\LOB\FILES\' ; 5. Initialiser un BFILE grce la mthode BFILENAME(' nomDirectory'' , nomFichier' ); INSERT INTO projet VALUES(102, ' Objectif lune ' , BFILENAME(' BFILE_DIR' , ' ORACLEGAL3.DOC' )); NOTE :
Pas de vrification de la prsence du fichier en insertion

Page

175

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

11. 3 Les LOB externes


I

Rgles d' utilisation des directory


Une directory ne doit pas pointer sur les Rpertoires des Fichiers Oracle(fichiers de donnes, de controles our Redo Log) : RISQUE d' ACCIDENTS Contrler l' affectation du privilge CREATE ANY DIRECTORY Ne pas utiliser les commandes DROP ou REPLACE sur les objets qui pointent vers un BFILE en cours de manipulation. Risque de perte de pointeurs Le retrait des privilges un utilisateur sur une Directory provoque l' chec de ses actions sur un BFILE

Page

176

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

11. 4 Les LOBs Locators


I

On distingue deux types de Lobs Locators :


les LOBs Locators internes les LOBs Locators externes

Un Lob Locator est un pointeur contenu dans un enregistrement vers les donnes (DATA) d' un LOB externe ou interne.
Sil sagit dun BFILE le Locator est un nom de fichier Sil sagit dun CLOB, BLOB ou NCLOB cest la position de la valeur du LOB dans son segment de donnes

Page

177

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

11. 4 Les LOBs Locators


I

Oprations sur les LOBs Locators


Initialisation des colonnes devant contenir des LOCATORS. Via INSERT et UPDATE en utilisant les Builtins : EMPTY_CLOB() RETURN CLOB; EMPTY_BLOB() RETURN BLOB; BFILENAME(directory_alias, filename) RETURN BFILE; Rcupration des LOBs dans des Variables HOTEs SELECt nomLob INTO variableLob Manipulations de LOBs partir du package DBMS_LOB

Page

178

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

11.5 Le Package DBMS_LOB


I

LOB PL/SQL Package (DBMS_LOB)


La plupart des oprations utilises sur les objets BFILEs, CLOB, BLOB et NCLOB sont contenues dans la boite outils DBMS_LOB. Ces outils utilisent les valeurs de deux constantes :
DBMS_LOB.MAX_BLOB_SIZE = 4 Go. DBMS_LOB.MAX_CLOB_SIZE = 4 Go.

Les fonctions et procdures de ce package peuvent tre classes en deux groupes :


Mutators : Write, fdelete, copy, erase..... (interviennent sur la mise jour de fichiers externes). Observers : Compare, read, exist, ... (interviennent en consultation).

Page

179

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

11.5 Le Package DBMS_LOB


I

Classification des mthodes


Mthodes de MAJ des BLOB, CLOB et NCLOB Append() Ajoute le contenu du source vers Destination copie un LOB source vers un autre Efface toute les parties dun LOB Charge les donnes d' Fichier vers un un BLOB interne Rduit la valeur d' LOB la taille un spcifie Ecriture des donnes dans un LOB partir d' OFFSET un

Copy() ERASE() LOADFROMFILE()

TRIM()

WRITE

Page

180

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

11.5 Le Package DBMS_LOB


I

Classification des mthodes


Mthodes de Lecture et de contrle des LOB internes et Externes compare compare deux LOBs ou deux parties de LOBs rend la longueur dun LOB rend la position de la Nime occurrence d' modle dans le LOB un lecture des donnes dans un LOB partir de la position OFFSET rend une "partie" du LOB partir de la position OFFSET

getLength() instr()

read()

substr()

Page

181

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

11.5 Le Package DBMS_LOB


I

Classification des mthodes


Mthodes spcifiques aux BFILE fileClose() fileClose() fileExist() rend la longueur dun LOB fermeture de tous les fichiers ouverts teste si le fichier existe bien dans sa directory rend le nom Oracle de la directory et le nom du fichier test si un fichier est ouvert ouverture file

fileGetName()

fileIsOpen() fileOpen()

Page

182

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

11.5 Le Package DBMS_LOB


I

Classification des mthodes


Les types de donnes en entre ou en sortie des mthodes sur les BLOB
BLOB : source ou destination des Binary LOB RAW : source "raw buffer" et destination "raw buffer" (BLOB) CLOB : source ou destination des Character LOB VARCHAR2 :source/destination des buffers de caractres (utile pour manipuler les CLOB et NCLOB) INTEGER : spcifie la taille du buffer ou du LOB, l' offset du LOB

Page

183

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

11.5 Le Package DBMS_LOB


I

La mthode READ
Cette mthode permet de lire des donnes dans les LOB internes ou externes Trois prototypes sont disponibles selon le type de LOB : BLOB, CLOB/NCLOB, BFILE
1. procedure READ(lob_loc IN BLOB, amount IN OUT BINARY_INTEGER, offset IN TEGER, buffer OUT RAW) 2. procedure READ(lob_loc IN CLOB CHARACTER SET ANY_CS, amount IN OUT BINARY_INTEGER, offset IN TEGER, buffer OUT VARCHAR2 CHARACTER SET LOB_LOC%CHARSET) 3. procedure READ(lob_loc IN BFILE, amount IN OUT BINARY_INTEGER, offset IN TEGER, buffer OUT RAW)

Page

184

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

11.5 Le Package DBMS_LOB


I

La mthode READ
les paramtres nom lob_loc amount offset buffer description Locator du LOB lire Quantit des donnes lire Position partir du dbut du CLOB ou BLOB Buffer dans lequel est stock le rsultat

les exceptions pouvant survenir


VALUE_ERROR INVALID_ARGVAL NO_DATA_FOUND Pour les BFILEs seuls : UNOPENED_FILE, NO_EXIST_DIRECTORY, NOPRIV_DIRECTORY, INVALID_OPERATION
Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

Page

185

11.5 Le Package DBMS_LOB


I

La mthode READ
Exemple de lecture d' BLOB un
CREATE OR REPLACE PROCEDURE readCvAnime IS lobCvAnime BLOB; buffer RAW(32767); qte BINARY_INTEGER := 32767; position INTEGER := 1; BEGIN SELECT cv_anime INTO lobCvAnime FROM lpilote WHERE pl#=1; LOOP DBMS_LOB.READ(lobCvAnime, qte, position, buffer); /* Insrer les Manipulations ICI*/ position := position+qte; END LOOP; EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE(' More Data' No ); END; /

Page

186

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

11.5 Le Package DBMS_LOB


I

La mthode READ
Exemple de lecture dans un BFILE
CREATE OR REPLACE PROCEDURE readProjetFile IS bfProjetFile BFILE; buffer RAW(32767); qte BINARY_INTEGER := 32767; position INTEGER := 1; BEGIN SELECT projFile INTO bfProjetFile FROM projet WHERE proj#=102; -- ouverture du fichier (Lecture seule sinon erreur) IF DBMS_LOB.FILEEXISTS(bfProjetFile)=1 THEN DBMS_OUTPUT.PUT_LINE(Fichier Ouvert ! ); DBMS_LOB.FILEOPEN(bfProjetFile, DBMS_LOB.FILE_READONLY); ELSE DBMS_OUTPUT.PUT_LINE(Fichier inexistant); END IF; --position := position+qte; -- suivre

Page

187

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

11.5 Le Package DBMS_LOB


I

La mthode READ
Exemple de lecture d' BFILE un LOOP
DBMS_LOB.READ(bfProjetFile, qte, position, buffer); position := position+qte; /* Insrer les Manipulations ICI*/ END LOOP; EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE(' du LOB' Fin ); DBMS_LOB.FILECLOSE(bfProjetFile); END; /

Page

188

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

11.5 Le Package DBMS_LOB


I

La mthode WRITE
Cette mthode permet d' crire des donnes dans un LOB interne partir d' OFFSET un Deux prototypes sont disponibles selon le type de LOB : BLOB, CLOB/NCLOB, BFILE
1. procedure WRITE(lob_loc IN OUT BLOB, amount IN IN BINARY_INTEGER, offset IN TEGER, buffer IN RAW) 2. procedure WRITE(lob_loc IN OUT CLOB CHARACTER SET ANY_CS, amount IN BINARY_INTEGER, offset IN TEGER, buffer IN VARCHAR2 CHARACTER SET LOB_LOC%CHARSET)

Page

189

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

11.5 Le Package DBMS_LOB


I

La mthode WRITE
les paramtres nom lob_loc amount offset buffer description Locator du LOB interne ou crire Nombre de bytes crire ou crits Position ( partir du dbut du CLOB ou BLOB) partir de laquelle on va crire Buffer contenant les donnes crire

les exceptions pouvant survenir


VALUE_ERROR INVALID_ARGVAL

Page

190

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

11.5 Le Package DBMS_LOB


I

La mthode WRITE
Exemple d' criture dans un BLOB
CREATE OR REPLACE PROCEDURE writeCvTexte IS lobCvtexte CLOB; buffer VARCHAR2(32767); qte BINARY_INTEGER := 32767; position INTEGER :=2147483647; BEGIN SELECT cv_texte INTO lobCvTexte FROM lpilote WHERE pl#=12; LOOP -- prparer des donnes dans buffer puis crire -- buffer := ' ya un debut a tout' Il ; DBMS_LOB.WRITE(lobCvTexte, qte, position, buffer); position := position+qte; END LOOP; EXCEPTION WHEN VALUE_ERROR THEN DBMS_OUTPUT.PUT_LINE(' Erreur de Valeurs' ); END; /

Page

191

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

11.6 Informations sur les LOBs


I

Les vues du dictionnaire Oracle


Les vues sur les LOBS : ALL_LOBS, DBA_LOBS, USER_LOBS Les vues sur les directories : ALL_DIRECTORIES, DBA_DIRECTORIES

DESCRIBE DBA_LOBS
Null? NOT NULL NOT NULL NOT NULL NOT NULL NOT NULL Type VARCHAR2(30) VARCHAR2(30) VARCHAR2(400 VARCHAR2(30) VARCHAR2(30) NUMBER NUMBER VARCHAR2(3) VARCHAR2(3) VARCHAR2(3)

Name OWNER TABLE_NAME COLUMN_NAME SEGMENT_NAME INDEX_NAME CHUNK PCTVERSION CACHE LOGGING IN_ROW

Page

192

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

11.6 Informations sur les LOBs


I

Les vues du dictionnaire Oracle


DESCRIBE DBA_LOBS
Name CHUNK Description Unit de transfert dans un LOB : Multiple d' Bloc un Zone de lecture consistante Cache mmoire pour le LOB Vrai si stockage dans le segment contenant le LOB

PCTVERSION CACHE IN_ROW

DESCRIBE DBA_DIRECTORIES
Name OWNER DIRECTORY_NAME DIRECTORY_PATH
I

Null? NOT NULL NOT NULL

Type VARCHAR2(30) VARCHAR2(30) VARCHAR2(4000)

Page

193

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

11.6 Informations sur les LOBs


I

Les vues du dictionnaire Oracle


Lister les informations sur les directories
SELECT TABLE_NAME, COLUMN_NAME, SEGMENT_NAME, INDEX_NAME, CHUNK, PCTVERSION, CACHE, IN_ROW

FROM dba_lobs WHERE table_name IN (' LPILOTE'' , PROJET' );


TABLE_NAME COLUMN_NAME SEGMENT_NAME INDEX_NAME CHUNK PCTVERSION CACHE IN_ROW LPILOTE CV_TEXTE SYS_LOB0000003236C00 SYS_IL0000003236C000 2048 007$ 07$ 20 YES NO SYS_LOB0000003236C00 LPILOTE CV_ANIME SYS_IL0000003236C000 2048 008$ 08$ 10 NO NO

Page

194

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

11.6 Informations sur les LOBs


I

Les vues du dictionnaire Oracle


Lister les informations sur toutes les Directories de votre base. SELECT OWNER, DIRECTORY_NAME, DIRECTORY_PATH FROM dba_directories;
OWNER DIRECTORY_NAME DIRECTORY_PATH SYS BFILE_DIR2 SYS BFILE_DIR F:\ora8data\DBCOUR\LOB\files\ C:\ORA8DATA\DBCOUR\LOB\FILES

Page

195

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

11.7 Quelques Considrations sur les LOBs


I

Lecture Consistante et LOB :


Oracle assure que deux processus peuvent agir sur un mme CHUNCK d un LOB. L un en lecture l autre en criture.

Le nombre maximum de fichiers BFILE ouverts est contrl via le paramtre d' initialisation
SESSION_MAX_OPEN_FILES=valeur Le dveloppeur doit, s' a ouvert un fichier le il fermer. SINON RISQUE DE DEPASSEMENT du PARAMETRE SESSION_MAX_OPEN_FILES

Page

196

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

11.8 Contraintes sur les LOBs


I

Pas de LOB distribu Pas de chargements de LOB avec SQLLOADER en V8. Utiliser dbms_lob.loadfromfile() Les LOBs ne peuvent apparatre : dans des requtes avec Group by, Order by, select distinct, join.

Page

197

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

11.8 Contraintes sur les LOBs


I

Pas dappel des mthodes du package DBMS_LOB dans le code PL/SQL du poste client Les NCLOBs ne sont pas autoriss dans les types objets

Page

198

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

12. PL/SQL
I

PLAN
Gnralits Les types Les instances Les collections en PL/SQL Les call out de PL/SQL

Page

199

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

12. PL/SQL
I

Gnralits
Version disponible du cot du moteur Oracle. les outils de dveloppement ne sont pas encore toujours jour supporte la programmation Orient Objet amliore les performances grce la centralisation du code sur le moteur base de donnes augmente la portabilit

Page

200

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

12. PL/SQL OBJET


I

Les types
Oracle Objet distingue deux sortes de types :
.Les types dfinis en SQL (types permanents): Les ADT dfinis ce niveau peuvent avoir des mthodes Les types dfinis en PL/SQL (types temporaires) : leur dure de vie est limite l excution du programme.

Dfinition d' type permanent en SQL un


SQL>CREATE TYPE pAdresse_t as object( Numro NUMBER(4), Rue VARCHAR2(20), Code_Postal NUMBER(5), Ville VARCHAR2(20)); Ce type pourra tre utilis dans la dclaration de variables PL/SQL

Page

201

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

12. PL/SQL OBJET


I

Les types
Dfinition d' type temporaire en PL/SQL un
Les types temporaires sont dfinis grce la commande TYPE. Il sera possible de dfinir des "Types Tables", des Types RECORD, des Types VARRAY et des Types REF CURSOR Les diffrentes Syntaxes TYPE nomType IS VARRAY(limit) OF typeDesElements; TYPE nomType IS TABLE OF typeDesElements ; TYPE nomType IS RECORD (dclarationDesChamps, ); TYPE nomType REF CURSOR OF typeDesElements ; Les lments d' VARRAY ou d' Type table peuvent un un pas tre : BOOLEAN, NCHAR, NVARCHAR2, types objets contenant des types tables ou des VARRAY, des REF CURSOR, des TYPES TABLES ou des VARRAY

Page

202

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

12. PL/SQL OBJET


I

Les types
Dfinition d' type temporaire en PL/SQL un
Exemple declare TYPE numList_t IS TABLE OF NUMBER; TYPE jourSeamine_t IS VARRAY(7) OF VARCHAR2(13); TYPE tabAdresse_t IS VARRAY(2) OF Adresse_t; TYPE pAdresse_t IS RECORD( Numero NUMBER(4), Rue VARCHAR2(20), Code_Postal NUMBER(5), Ville VARCHAR2(20)); p padresse_t; begin p.numero :=10; end; / NOTE : adresse_t est est type permanent

Page

203

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

12. PL/SQL OBJET


I

Les instances

1) Instantiation permanente dun ADT -- cration de la table object Adresse CREATE TABLE Adresse OF Adress_t ; -- type abstrait dfini pralablement INSERT INTO Adresse VALUES (1, rue Arago ,06000, NICE ) ; 2) Instantiation temporaire dun ADT DECLARE addr1 adress_t := adress_t (1, rue Arago ,06000, NICE ) ; --avec constructeur addr2 adress_t ; -- a pour valeur NULL BEGIN IF addr2 IS NULL -- VRAI ; addr2.Rue := 5th Avenue ; -- Exception ! END ;

Page

204

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

12. PL/SQL OBJET


I

Les collections en PL/SQL


A la diffrence de PL/SQL V2, les tables dfinies partir d Oracle 8 peuvent contenir des ADTs comme lments. Exemple de manipulation d' collection dfinies une dans la base ou dans PL/SQL SQL> CREATE PR REPLACE TYPE avion9_t as object ( Av# AvType Loc Cap
AS TABLE OF avion9_t;

NUMBER(4), VARCHAR2(45), VARCHAR2(20), NUMBER(4));

SQL>CREATE OR REPLACE TYPE avion9_set_t

Page

205

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

12. PL/SQL OBJET


I

Les collections en PL/SQL


Exemple de manipulation d' collection dfinie dans une la base ou dans PL/SQL

Cration d une table avec une colonne de type table CREATE TABLE hangar9 ( hangar# avions9 NUMBER(2), avion9_set_t)

NESTED TABLE avions9 STORE AS storeAvions9;

Page

206

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

12. PL/SQL OBJET


I

Les collections en PL/SQL OBJET


Exemple de manipulation d' collection dfinie dans une la base ou dans PL/SQL
DECLARE tabav9 avion9_set_t; BEGIN tabav9 := avion9_set_t( avion9_t(1, ' Concorde'' , Paris'100), , avion9_t(1, ' A300'' , Berlin'300), , avion9_t(1, ' A320'' , Paris'200)); ,

INSERT INTO hangar9 values (1, avion9_set_t(avion9_t(1, ' Caravelle' , ' Paris'250), avion9_t(2, ' , A300'' , 300))); , Nice' INSERT INTO hangar9 VALUES(2, tabav9); END; /
Page

207

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

12. PL/SQL OBJET


I

Les CALL OUT de PL/SQL OBJET


Il est possible d' excuter un code d' L3G un (gnralement C ou parfois PASCAL) partir d' un code PL/SQL. Ce code L3G s' excute dans un espace d' adressage spar. Il a un accs contrl grce aux objets LIBRARY.

Page

208

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

13. Import/Export
I

Plan
Gnralits Import/Export et performances Le dictionnaire des donnes Les Exports Les Imports Import/Export de BLOB Divers

Page

209

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

13.1 Gnralits
I

Les utilitaires Import/Export prennent en compte tous les objets dORACLE OBJET. Si lors dun import/export, il apparat des types objets dans une table, elle sera considre comme oriente objet. Les objets manipuls lors des import/export sont les suivants :
Les ADTs et rfrences d ADT. Les Librairies et fonctions spcifiques. Les LOBs. Les DIRECTORIES. Les Tableaux (ARRAY et VARRAY) . Les Nested Tables.

Page

210

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

13.1 Import/Export et performance


I

Les performances dimport/export dcroissent si export/import :


De donnes volumineuses de donnes objets de tables objets des tables n' ayant aucune rfrence vers les User Defined Type

Page

211

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

13.2 Le Dictionnaire de donnes


I

La table SYS.INCEP, dfinie dans sql.bsq


Elle contient toutes les informations propos des dfinitions des types exports. Pour les types, la valeur du type OID (TOID), au moment de lExport, est enregistre. Elle sera utilise pour diffrencier les types modifis des types qui ont t remplacs depuis le dernier Export.

Page

212

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

13.3 Les Exports


I

Les dfinitions de types utilises par une table sont incluses dans l export, uniquement si elles appartiennent au mme schma.

Page

213

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

13.4 Les Imports


I

OID et Import
Limport prserve les OID des Types , des tables objets et des lignes exportes La valeur de lOID exporte ne doit pas tre diffrente en cas d' export un COMMIT est effectu aprs chaque table exporte En cas de CREATE OR REPLACE limport dtermine le dgr d' utilisation du type et supprime toute les tables qui l' utilesent

Page

214

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

13.5 Import/export des BLOBs


I

Ladministrateur doit manuellement se proccuper de la sauvegarde des fichiers binaires externaliss Oracle assure la sauvegarde des Localisations (Locators) des fichiers Binaires

Page

215

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

13.6 Divers
I

En version objet, il ny a pas de diffrence ou dimpact sur la commande EXPLAIN PLAN. La commande ANALYZE supporte dsormais les extensions lobjet.
De nouvelles syntaxes apparaissent (ANALYZE COLUMN VALIDATE REF).

Page

216

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

14. CONCLUSION
I

Le modle Objet Relationnel est un compromis entre le modle objet pur et le modle relationnel. Il permet une approche volutive vers l' objet Il est ncessaire ds prsent denvisager la mise en place d' applications tests ou une migration L' option Objet permet d' tendre le noyau Oracle (cartouche : son, image, vido, texte, )

Page

217

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

15. Exercices
I

PLAN
Objectif du TP Dfinition du schma d' objets PL/SQL et Procdures stockes Insertion des objets Consultation des objets Mise jour des objets Les vues

Page

218

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

15. Exercices
I

Objectif du TP
Manipuler une base de donnes objet relationnelle Les points que nous visons sont :
concevoir et crer le schma d' base de donnes objet une relationnelle consulter les objets du schma en exploitant entre autre les nouveaux oprateurs tels que TABLE, VALUE, ... effectuer des insertions, mises jour et suppressions dans ce schma en exit Manipuler des objets dans PL/SQL Manipuler les vues objets sur les tables rlationnelles manipuler des objets volumineux

Page

219

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

15. Exercices
I

Dfinition du schma d' objets


Schma conceptuel
EMPLOYE

# * * * * *

EMPNO ENAME PRENOMS {de 0 4 prnoms} JOB SAL CV DATE_NAISS DATE_EMB

Est employ dans emploie DEPT # * * DEPTNO DNAME LOC

# *

: indique un identifiant : attribut obligatoire : attribut facultatif

Page

220

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

15. Exercices
I

Dfinition du schma d' objets


Description des entits
Nom entit
EMPLOYE

Nom des champs


EMPNO ENAME PRENOMS JOB SAL CV DATE_NAISSS DATE_EMB

type
NUMBER(4) varchar2(15) varray Varchar2(20) number(7,2) CLOB date date number(4) varchar2(30)

Libell
Numro Employ Nom EMPLOYE : En lettre capitales tableau de 4 prnom max Mtier de l employ {Ingnieur, Secrtaire, Directeur, Planton, PDG} Salaire entre 1500 et 15000 CV Date de Naissance Date embauche : doit tre suprieure Date_Naiss Nr. de dpartement doit tre entre 1000 et 9999 Nom du dpartement {Recherche, Resources, Humaines, Marketing, Ventes, Finance} Localisation du dpartement (voir

DEPT

DEPTNO DNAME

LOC

varchar2(30)

NOTE : prendre en compte les contraintes attributs UNIQUE ou OBLIGATOIRE schma page prcdente)

Page

221

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

15. Exercices
I

Dfinition du schma d' Objets


Suggestions Toutes les tables doivent tre des tables objets les liens 1:N ou N:M sont systmatiquement modliss via le type REF si 1 ou NESTED TABLE si N les dclarations des types FORWARD ou INCOMPLETS (EMPLOYE_t, DEPT_t) sont faire les lments des Types Tables (listes) sont des rfrences vers les types incomplets prcits les mthodes sont dclarer ds la cration des types l' action de chaque mthode doit tre limite RESTRICT_REFERENCES chaque "Type objet" doit contenir une mthode de comparaison MAP ou ORDER les index seront localiss dans le Tablespace TS_INDEX_RES et les tables dans le Tablespace TS_TABLE_RES les index et les donnes des LOB internes sont localiser dans le tablespace TS_LOB_RES. NOTE : LIRE L' ENSEMBLE DU TP PUIS CHAQUE SECTION ENTIEREMENT

Page

222

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

15. Exercices
I

Cration des types


Les tapes
1. Crer les types FORWARD ou INCOMPLETS appropris. Il n' pas ncessaire de dfinir tous les types en FORWARD est 2. Crer le type ARRAY tab_prenoms_t ncessaire pour grer la liste des PRENOMs 3. Crer le Type Table (liste) ncessaire : ces lments seront des rfrences vers des EMPLOYE_t 4. Dfinir maintenant vos types EMPLOYE_T, DEPT_T, Vous devez y dclarer les champs ou attributs des types, les mthodes et les liens ou Nested Tables Note : pour les mthodes et les liens, voir plus loin.

Page

223

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

15. Exercices
I

Cration des types


Les mthodes
1. Les mthodes de consultation
introduire une mthode de classe qui affiche les informations (, ...) sur un DEPT connaissant son numro

static function getDept (deptno) return boolean; crire une mthode de classe qui affiche pour un DEPT donn, le nom et les prnoms de chaque Employ qui y travaillent. Static function getInfoEmp(deptno) return boolean

2. Les mthodes pour ordonner les lments des types


crire pour chaque type une mthode ORDER ou MAP. Il est ncessaire d' utiliser au moins une fois chacune de ces mthodes.

Page

224

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

15. Exercices
I

Cration des types


Les mthodes
3. Les mthodes de gestion des Liens
Introduire pour chaque Lien Multivalu les procdures suivantes : - addLinkNomColonneNested(RefType1 REF type); -- pour ajouter dans la liste - deleteLinkNomColonneNested (RefType1 REF type); -- suppression dans un lien - updateLinkNomColonneNested (RefType1 REF type, RefType2 REF type); -- modification du lien

4. Notes
ces mthodes DOIVENT tre en Lecture seule (PRAGMA RESTRICT_REFERENCES) sauf celles dcrites en 3. dans cette phase, aucune mthode n' encore t a implmente. Il ne s' que des dclarations. agit

Page

225

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

15. Exercices
I

Cration des tables


Crer les tables EMPLOYE_O, DEPT_O comme tant des tables objets Les contraintes dintgrits
Dfinir les contraintes d' intgrits d' entits et de rfrences sur chacune des tables Dfinir les contraintes d' intgrits de domaine (cf. la description des champs page 4 et page 5)

Les Nested Tables


Donner les noms de segments toutes vos Nested Tables Format du nom : storeNomColNested

Les LOB internes PCTVERSION doit tre 30

Page

226

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

15. Exercices
I

Cration des tables


Localisation des objets
Les tuples des tables objets sont localiser dans le Tablespace TS_TABLE_RES les index des tables objets y compris ceux crs implicitement sont localiser dans TS_INDEX_RES les donnes et les index des LOB internes sont localiser dans le Tablespace TS_LOB_RES

Cration index
Crer un index unique sur la colonne dname de DEPT_o crer un index sur la colonne implicite Nested_table_id de la Nested Table. Peut - il tre unique ?

Page

227

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

15. Exercices
I

Insertion des objets


Insrer 2 ou 3 objets dans chacune des tables cres prcdemment. L' intgrit des objets doit tre assure

Mise jour des objets


Modifier la localit d' dpartement connaissant son un nom Modifier la date d' embauche d' Employ un connaissant son nom sachant qu il doit travailler dans l un des dpartements suivants : Recherche , Finance ou Ressources Humaines Supprimer un DEPT

Page

228

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

15. Exercices
I

Consultation des objets


Faire un Listing des DEPTs tris par nom Pour un DEPT donn, lister tous les EMPLOYEs qui y travaillent

PL/SQL et Procdures stockes


Implmenter les mthodes dcrites plus haut au niveau des types DEPT et EMPLOYE tester les mthodes

Page

229

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel

15. Exercices
I

Les vues
crer une table relationnelle (non objet) DEPT_r. La structure de cette table est celle du type DEPT_t sans les liens Insrer 3 ou 4 objets dans cette table Crer une vue objet DEPT_v masquant toutes les colonnes de cette table. Le type objet associ doit s' appeler old_DEPT_t. Y insrer 2 lignes Crer un trigger INSTEAD OF qui permet d' insrer travers la vue dans la table DEPT_r et DEPT_o Manipuler (insert, update, delete, select) via la vue

Page

230

Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel