Oracle et le Modèle Objet Relationnel

Gabriel MOPOLO-MOKE prof. Associé UNSA 2005/2006

Page

1

Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel

1. Plan Général
I

1. PLAN GENERAL 2. INTRODUCTION 3. LES TYPES DE BASE (Prédéfinis) 4. LES TYPES ABSTRAITS (COMPLEXES) 5. NOTION D’IDENTITE 6. LA NOTION DE COLLECTION 7. CREATION ET MANIPULATION D’OBJETS 8. LES LIENS D’ASSOCIATIONS
2
Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel

I

I

I

I

I

I

I

Page

1. Plan Général
I

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

I

I

I

I

I

I

Page

3

Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel

2. INTRODUCTION
I

Pourquoi Oracle Objet?
• Modélisation des données complexes
– – – – – Encapsulation des données Type abstraits Collections (varray, nested table) Liens complexes(composition, association, héritage) Dépassement de la première forme Normale du modèle relationnel

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

Page

4

Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel

2. INTRODUCTION
I

Pourquoi Oracle Objet? (suite)
• Evolutivité
– Exploiter de nouveaux gisements de données dans les entreprises – Données une vision objet aux applications relationnelles existantes

• Applications internet et intranet
– SGBD ouvert supportant Java en natif au même titre que PL/SQL avec une intégration forte dans l ’environnement ORB – Données XML directement gérées par le SGBD

Page

5

Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel

2. INTRODUCTION
I

Approche d’intégration des objets dans Oracle
• Oracle suit l’approche SQL3 • Oracle étend son noyau relationnel vers l’objet via la notion de domaine (type):
– Les colonnes des tables peuvent maintenant être définis 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

6

Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel

3. LES TYPES PREDEFINIS
I

Les types de base (CHAR, VARCHAR2, DATE, NUMBER, ….) de la version 7 sont conservés dans les versions objets Les nouveaux types
• Les associations référentielles "Père/Fils" (REF). • Les collections : VARRAY (tableaux) et Nested Tables (Tables imbriquées). • Les LOBs : BLOB, CLOB, BFILE • NOTE : L ’ utilisateur pourra ajouter ses propres types: les types données abstraits (ADT).

I

Page

7

Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel

4. LES TYPES ABSTRAITS (COMPLEXES)
I

PLAN
• Les Types de données Abstraits(ADT) • Exemple de création d’un ADT sous Oracle • Définition des Méthodes d’un Type Abstrait • Comparaison sur les ADT • Complément sur les ADT Oracle • Modification d’un ADT • Suppression d’un ADT • Visualisatioin des Informations sur les ADT • Encapsulation • Constructeur • Instanciation

Page

8

Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel

4. Mopolo-Moké Oracle et le modèle Objet Relationnel . LES TYPES ABSTRAITS (COMPLEXES) I Les Types de donnees Abstraits(ADT) • Un Type abstrait de données peut être vu comme une boite noire accessible uniquement par des opérateurs • Les spécifications du type sont indépendantes de leurs implémentations • Permet à l’utilisateur de définir lui-même ses propres types Page 9 Copyright G.

Mopolo-Moké Oracle et le modèle Objet Relationnel . 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.4.

LES TYPES ABSTRAITS (COMPLEXES) I Les Types de donnees Abstraits(ADT) • Syntaxe de création d’un type Forward ou TYPE INCOMPLET – permet de résoudre le problème de références croisées en type CREATE [OR REPLACE] TYPE nomType. Mopolo-Moké Oracle et le modèle Objet Relationnel . [WNDS. {STATIC | MEMBER} {functionSpecification | procedureSpecification } [PRAGMA RESTRICT_REFENCES ({nomFonction|default}. CREATE OR REPLACE TYPE pilote_t. • Syntaxe de création d’un type objet CREATE [OR REPLACE] TYPE nomType AS OBJECT( { nomAttribut1 typeDeDonnée. RNDS. {MAP | ORDER} MEMBER function_specification. RNPS. … nomAttributN typeDeDonnée.4. WNPS. TRUST])] }) Note : les clauses seront décrites par la suite 11 Page Copyright G.

salaire number(7. Rue VARCHAR2(20). Page 12 Copyright G.2)).-. Mopolo-Moké Oracle et le modèle Objet Relationnel . -. adresse REF adresse_t. Code_Postal NUMBER(5).4. nom VARCHAR2(12). dnaiss DATE. • Type abstrait avec champs complexes CREATE OR REPLACE TYPE Pilote_t AS OBJECT( PL# NUMBER(4). adresse adresse_t. Ville VARCHAR2(20)).type abstrait défini préalablement Tel VARCHAR2(12).2) ).référence sur une adresse Tel VARCHAR2(12). dnaiss DATE. LES TYPES ABSTRAITS (COMPLEXES) I Exemple de création d’un ADT sous Oracle • Type abstrait sans champs complexes CREATE TYPE adresse_t as object( Numero NUMBER(4). salaire NUMBER(7. • ADT avec un champ de type référence CREATE OR REPLACE TYPE REF_Pilote_t AS OBJECT( PL# NUMBER(4). nom VARCHAR2(12).

4. Mopolo-Moké Oracle et le modèle Objet Relationnel . Seul le constructeur par défaut est utilisable • La déclaration des méthodes se fait dans le TYPE SPECIFICATION et l’implémentation dans le TYPE BODY • Le mot clé MEMBER précède chaque méthode d’instance • Le mot clé STATIC précède chaque méthode de classe Page 13 Copyright G. LES TYPES ABSTRAITS (COMPLEXES) I Définition des Méthodes d’ un Type Abstrait • L’utilisateur peut définir autant de méthodes qu’ils le souhaite dans un ADT • Par contre il ne peut définir AUCUN CONSTRUCTEUR.

– Une clause de langage (PL/SQL. – Un ensemble de résultats retournés par la méthode. les résultats (OUT). WNPS. LES TYPES ABSTRAITS (COMPLEXES) I Définition des Méthodes d’un Type Abstrait • Une méthode se caractérise par : – Un nom – Un ensemble de paramètres : les données en entrée(IN). – PRAGMA RESTRICT_REFERENCE :WNDS. TRUST) – Un nom spécifique (un alias). C. Page 14 Copyright G. MEMBER. STATIC). les données/résultats (IN/OUT).4. RNPS. RNDS. Java. – Un ensemble d' indicateurs précisant la nature de la méthode (MAP/ORDER MEMBER. – Un ensemble d' exceptions. Mopolo-Moké Oracle et le modèle Objet Relationnel .etc…) – Une implémentation. les appels par référence (CALL-BY-REFERENCE).

LES TYPES ABSTRAITS (COMPLEXES) I Définition des Méthodes d’un Type Abstrait • Notes : – MAP function : permet de définir une règle de comparaison s ’ appuyant une des des colonnes du type. Elle n’ a pas besoin d’ un objet pour être invoquée – 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: désactive provosoirement les interdits positionnés Page 15 Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel .4. – STATIC Function : Une méthode statique n' pas a l' objet courant comme paramètre implicite. – ORDER Function: permet de comparer deux objets.

Ce passage n’ est pas nécessaire s’ il s’ agit d’ une PROCEDURE Page 16 Copyright G. newSalaire IN NUMBER) RETURN BOOLEAN. -.type abstrait défini préalablement Tel VARCHAR2(12). MEMBER FUNCTION setPiloteSalaire(SELF IN OUT ref_pilote_t. Mopolo-Moké Oracle et le modèle Objet Relationnel . MEMBER FUNCTION getPiloteSalaire RETURN NUMBER. LES TYPES ABSTRAITS (COMPLEXES) I Définition des Méthodes d’un ADT • Exemple de définition de méthodes Spécification du type PILOTE CREATE OR REPLACE TYPE REF_Pilote_t AS OBJECT( PL# NUMBER(4).RNPS) ). / NOTE : . MEMBER PROCEDURE testSetSalaire. PRAGMA RESTRICT_REFERENCES(setPiloteSalaire. nom VARCHAR2(12).le paramètre SELF doit être passé en paramètre si l’ on souhaite modifier l’ objet courant dans UNE FONCTION.4. PRAGMA RESTRICT_REFERENCES(getPiloteSalaire. WNDS).2). adresse adresse_t. dnaiss DATE. salaire NUMBER(7. plNum IN NUMBER.

plNum IN NUMBER. / Page 17 Copyright G. 10000). BEGIN retour := Self. MEMBER FUNCTION setPiloteSalaire (SELF IN OUT ref_pilote_t.setPiloteSalaire(10. END. END IF.4. Mopolo-Moké Oracle et le modèle Objet Relationnel . MEMBER PROCEDURE testSetSalaire IS retour BOOLEAN. return true. ELSE return false. END. LES TYPES ABSTRAITS (COMPLEXES) I Définition des Méthodes d’un ADT • Exemple d’implémentation de méthodes Implémentation du corps des méthodes getPiloteSalaire et setPiloteSalaire CREATE OR REPLACE TYPE BODY ref_pilote_t IS MEMBER FUNCTION getPiloteSalaire RETURN NUMBER IS BEGIN RETURN salaire. END. END. newSalaire IN NUMBER) RETURN BOOLEAN IS BEGIN IF pl# = plNum THEN salaire := newSalaire.

x. CREATE TYPE BODY Complex AS MEMBER FUNCTION plus (x Complex) RETURN Complex IS BEGIN RETURN Complex(rpart + x. -. Mopolo-Moké Oracle et le modèle Objet Relationnel . ipart REAL.A SUIVRE Page 18 Copyright G. MEMBER FUNCTION plus (x Complex) RETURN Complex.rpart.ipart). MEMBER FUNCTION less (x Complex) RETURN Complex IS BEGIN RETURN Complex(rpart . LES TYPES ABSTRAITS (COMPLEXES) I Définition des Méthodes d’un ADT • Autre exemple CREATE TYPE Complex AS OBJECT ( rpart REAL. END less.rpart. MEMBER FUNCTION divby (x Complex) RETURN Complex ).ipart). END plus. ipart . ipart + x. MEMBER FUNCTION times (x Complex) RETURN Complex.x. MEMBER FUNCTION less (x Complex) RETURN Complex.4.

Suite MEMBER FUNCTION times (x Complex) RETURN Complex IS BEGIN RETURN Complex(rpart * x.4.ipart + ipart * x.rpart * x. BEGIN RETURN Complex((rpart * x.ipart) / z). Mopolo-Moké Oracle et le modèle Objet Relationnel . (ipart * x. END times. / Page 19 Copyright G. END.ipart.rpart + ipart * x.ipart) / z.rpart**2 + x. MEMBER FUNCTION divby (x Complex) RETURN Complex IS z REAL := x.ipart * x.rpart). LES TYPES ABSTRAITS (COMPLEXES) I Définition des Méthodes d’un ADT • Autre exemple -.rpart .ipart**2.rpart . END divby. rpart * x.

Page 20 Copyright G. C1 != C2 • Par défaut. Exemple : C1 = C2. La comparaison de C1 et C2 peut être faite par défaut ou en réécrivant les méthodes MAP et ORDER • la comparaison par défaut n’est possible que pour l’égalité ou la différence entre objet. la valeur de chacun de leurs attributs doit être égale. pour que deux objets soient égaux.4. LES TYPES ABSTRAITS (COMPLEXES) I Comparaison d’ADT • Soit deux ADT C1 et C2 d’un type Type 1. Mopolo-Moké Oracle et le modèle Objet Relationnel .

Mopolo-Moké Oracle et le modèle Objet Relationnel .4. La valeur scalaire peut être de type(DATE. VARCHAR2. LES TYPES ABSTRAITS (COMPLEXES) I Comparaison d’ADT • MAP MEMBER “fonction” : – Permet de définir une fonction qui rend la position relative d’un objet dans l’ensemble des instances d’un type. les types ANSI SQL tels que CHARACTER or REAL) – possède un seul paramètre implicite SELF – adapté pour le TRI d’un grand nombre d’objets et les JOINTURES PAR HACHAGE Page 21 Copyright G. – L’ordre des objets est défini par rapport à une valeur scalaire RENDUE PAR LA FONCTION. NUMBER.

Mopolo-Moké Oracle et le modèle Objet Relationnel .4. LES TYPES ABSTRAITS (COMPLEXES) I Comparaison d’ADT • ORDER MEMBER “fonction” – permet de définir une méthode qui prend en paramètre un objet du type et le compare avec l’objet courant SELF – l’ordre est définie sur une ou plusieurs colonne du type – permet de comparer deux Objets – Il s’agit d’une approche de comparaison "PERSONALISEE" – Evaluation perpétuelle de la fonction POUR CHAQUE OBJET => lenteur Page 22 Copyright G.

LES TYPES ABSTRAITS (COMPLEXES) I Comparaison d’ADT • Notes : – il est impossible de définir à la fois une méthode ORDER MEMBER et une méthode MAP MEMBER dans un même type – pas plus d’une méthode ORDER ou MAP par type – MAP et ORDER sont appelées automatiquement lors de la comparaison d’objets Page 23 Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel .4.

Rue VARCHAR2(20). ’Centre’)). ’Nice’. ’Nice’. Code_Postal NUMBER(5). ’Ouest’)). 6000. LES TYPES ABSTRAITS (COMPLEXES) I Comparaison d’ADT • Exemple SANS les méthodes MAP et ORDER CREATE OR REPLACE TYPE adresse2_t as object( Numero NUMBER(4). 6100. ’rue du port’. Mopolo-Moké Oracle et le modèle Objet Relationnel . ’rue du congres’. ’rue des garages’. 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. 6000. ’rue du congres’.4. / CREATE TABLE adresse2_table(adr adresse2_t ). INSERT INTO adresse2_table VALUES( adresse2_t(2. Ville VARCHAR2(20). 6300. INSERT INTO adresse2_table VALUES ( adresse2_t(1. INSERT INTO adresse2_table VALUES( adresse2_t(2. quartier VARCHAR2(20) ). ’Nice’. ’Nice’. SQL> SELECT * FROM adresse2_table ORDER BY adr. ’Centre’)). INSERT INTO adresse2_table VALUES ( adresse2_t(3. ’Nord’)).

END. MAP MEMBER FUNCTION compAdresse RETURN VARCHAR2. WNPS. Code_Postal NUMBER(5). Ville VARCHAR2(20). END. / NOTE : La valeur de Comparaison des instance de de adresse2_t sera : ville||rue||numero. Ce qui réduit la comparaison à celle d ’un type scalaire Oracle Page 25 Copyright G. PRAGMA RESTRICT_REFERENCES (compAdresse. RNPS. / CREATE OR REPLACE TYPE BODY adresse2_t IS MAP MEMBER FUNCTION compAdresse RETURN VARCHAR2 IS BEGIN RETURN ville||rue||numero. Mopolo-Moké Oracle et le modèle Objet Relationnel . quartier VARCHAR2(20). Rue VARCHAR2(20). WNDS. LES TYPES ABSTRAITS (COMPLEXES) I Comparaison d’ADT • Exemple avec la méthode MAP MEMBER CREATE OR REPLACE TYPE adresse2_t as object( Numero NUMBER(4).4. RNDS) ).

6300. ’Centre’) ADRESSE2_T(2. CODE_POSTAL. 6000. ADR(NUMERO. ’Centre’) ADRESSE2_T(2. ’rue du congres’. ’Centre’) ADRESSE2_T(3. 6300. ’Nice’. 6100. ’Ouest’) SQL> SELECT * FROM adresse2_table order by adr. ’Ouest’) Page 26 Copyright G. ’Nice’. ’rue du port’. ’Nice’. 6100. 6100. ’rue des garages’. ’Nice’. ’Nice’. ’Nice’. RUE. Mopolo-Moké Oracle et le modèle Objet Relationnel . VILLE. ’rue des garages’. 6000. ’rue du congres’. LES TYPES ABSTRAITS (COMPLEXES) I Comparaison d’ADT • Exemple avec la méthode MAP MEMBER CREATE TABLE adresse2_table(adr adresse2_t ).QUARTIER) ADRESSE2_T(1. ’Nord’) ADRESSE2_T(1. ’Nord’)). ’rue du port’. 6000. ’Centre’)). INSERT INTO adresse2_table VALUES( adresse2_t(2. CODE_POSTAL. VILLE. 6000. ’Centre’)). 6000. ’Nice’. ’Nice’. INSERT INTO adresse2_table VALUES( adresse2_t(2.QUARTIER) ADRESSE2_T(2. INSERT INTO adresse2_table VALUES ( adresse2_t(3. ’rue du congres’. ’Nord’) ADRESSE2_T(2. ’Ouest’)). ’Nice’. ’rue du congres’. 6000. INSERT INTO adresse2_table VALUES ( adresse2_t(1. ’Nice’. ADR(NUMERO. ’Nice’. ’rue des garages’. RUE.4. ’rue du congres’. 6300. ’Centre’) ADRESSE2_T(3. ’rue du port’. ’rue du congres’. SQL> SELECT * FROM adresse2_table. ’Nice’.

Ville VARCHAR2(20). Est et enfin Ouest. quartier VARCHAR2(20). WNDS. CREATE OR REPLACE TYPE adresse2_t as object( Numero NUMBER(4).4. MAP MEMBER ne suffit plus. RNDS) ). PRAGMA RESTRICT_REFERENCES (compAdresse. Page 27 Copyright G. Code_Postal NUMBER(5). ORDER MEMBER FUNCTION compAdresse (adr IN adresse2_t) RETURN NUMBER. Mopolo-Moké Oracle et le modèle Objet Relationnel . Centre. LES TYPES ABSTRAITS (COMPLEXES) I Comparaison d’ADT • Exemple avec la méthode ORDER MEMBER – Nous souhaitons classer les adresses selon leur position géographique. Sud. Nord. RNPS. Rue VARCHAR2(20). WNPS.

CASE adr. WHEN ’Ouest’ THEN position2 := 5.numero. Mopolo-Moké Oracle et le modèle Objet Relationnel .numero. END CASE.ville|| adr. WHEN ’Centre’ THEN position2 := 2. position2 NUMBER :=0. Page 28 Copyright G. BEGIN CASE SELF. WHEN ’Sud’ THEN position2 := 3.rue|| adr. concAdr1 VARCHAR2(60) := SELF. WHEN ’Ouest’ THEN position1 := 5.ville||SELF. concAdr2 VARCHAR2(60) := adr. WHEN ’Est’ THEN position1 := 4.quartier WHEN ’Nord’ THEN position2 := 1. LES TYPES ABSTRAITS (COMPLEXES) I Comparaison d’ADT • Exemple avec la méthode ORDER MEMBER CREATE OR REPLACE TYPE BODY adresse2_t AS ORDER MEMBER FUNCTION compAdresse (adr IN adresse2_t ) RETURN NUMBER IS position1 NUMBER :=0.rue||SELF. WHEN ’Est’ THEN position2 := 4.4.quartier WHEN ’Nord’ THEN position1 := 1. END CASE. WHEN ’Centre’ THEN position1 := 2. WHEN ’Sud’ THEN position1 := 3.

Mopolo-Moké Oracle et le modèle Objet Relationnel .4. / Page 29 Copyright G. END IF. ELSIF concAdr1 > ConcAdr2 THEN return 1. ELSIF concAdr1 < ConcAdr2 THEN return -1. LES TYPES ABSTRAITS (COMPLEXES) I Comparaison d’ADT • Exemple avec la méthode ORDER MEMBER … concAdr1 := position1||concAdr1. IF concAdr1 = ConcAdr2 THEN return 0. END. concAdr2 := position2|| concAdr2. END.

6100. 6000. ADR(NUMERO. ’Centre’)). 6300. CODE_POSTAL. ’Nice’. 6300. ADR(NUMERO. ’rue du congres’. RUE. ’Nice’. ’Ouest’)). 6100. LES TYPES ABSTRAITS (COMPLEXES) I Comparaison d’ADT • Exemple avec la méthode ORDER MEMBER CREATE TABLE adresse2_table(adr adresse2_t ). INSERT INTO adresse2_table VALUES( adresse2_t(2. ’Nice’. CODE_POSTAL. 6000. ’rue du congres’. ’rue des garages’. ’Nice’. 6000. ’rue des garages’. ’Centre’) ADRESSE2_T(2. 6000. ’Nord’)). ’Centre’)). ’Centre’) ADRESSE2_T(3. ’Centre’) ADRESSE2_T(2. ’Nice’. ’rue du port’. INSERT INTO adresse2_table VALUES ( adresse2_t(3. ’Nice’. ’Nord’) ADRESSE2_T(2. ’rue du congres’. 6100. ’Nice’. ’rue des garages’. INSERT INTO adresse2_table VALUES ( adresse2_t(1. ’Nice’. 6300. ’rue du congres’. ’Nice’. ’rue du port’. SQL> SELECT * FROM adresse2_table. 6000. ’Nice’. ’Nice’. RUE. ’Ouest’) Page 30 Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel . VILLE) ADRESSE2_T(2. VILLE) ADRESSE2_T(1. ’Ouest’) SQL> SELECT * FROM adresse2_table order by adr. ’Nice’. 6000. ’rue du port’. ’rue du congres’.4. INSERT INTO adresse2_table VALUES( adresse2_t(2. ’Centre’) ADRESSE2_T(3. ’Nord’) ADRESSE2_T(1. ’rue du congres’.

31 Page Copyright G.4. Mopolo-Moké Oracle et le modèle Objet Relationnel . • ALTER ANY TYPE. supprimer. modifier. exécuter les méthodes d’ un type) • CREATE ANY TYPE. ni des LOBs. • UNDER ANY TYPE (droit d’ hériter dans tout schéma) • UNDER ANY VIEW • EXECUTE ANY TYPE • EXECUTE (privilège objet) • UNDER (privilège objet) • La fonction IS NULL permet de tester si la référence vers un ADT est null ou pas • La fontion IS DANGLING permet de vérifier si une référence pointe vers un objet détruit. LES TYPES ABSTRAITS (COMPLEXES) I Complément sur les Types Abstraits Oracle • Les privilèges sur les types sont : • CREATE TYPE (permet de créer. • L ’ indexation d ’ attributs d ’ ADT est possibles s' ils sont accessibles et ne sont ni des VARRAYs. hériter d’ un type. • DROP ANY TYPE. ni des NESTED TABLES.

Mopolo-Moké Oracle et le modèle Objet Relationnel .4. LES TYPES ABSTRAITS (COMPLEXES) I Modification d’un ADT • La modification d' type permet : de un Recompiler le type en cas de modifications. d' ajouter de nouvelles méthodes 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 spécification d' type un Ajout de nouvelles méthodes à un type Page 32 Copyright G.

WNDS. • L’ option REPLACE AS OBJECT listeElements – Syntaxe ListeElements ::= nomAttribut1 typeAttribut1.4.RNPS.… MEMBER specDeFonctionN.… nomAttributN typeAttributN. {MAP|ORDER} MEMBER specDeFonctions. Mopolo-Moké Oracle et le modèle Objet Relationnel .WNPS}}) – Notes • Ajout de nouvelles méthodes uniquement • La structure entière du type doit être reprise Page 33 Copyright G. LES TYPES ABSTRAITS (COMPLEXES) I Modification d’un ADT • L’ option compile Exemple SQL> ALTER TYPE adresse_t COMPILE. {RNDS. MEMBER specDeFonction1. PRAGMA RESTRICT_REFERENCES( {nomMethode.

Rue VARCHAR2(20). ALTER TYPE adresse3_t REPLACE AS OBJECT( Numero NUMBER(4). WNPS. PRAGMA RESTRICT_REFERENCES (compAdresse.4. PRAGMA RESTRICT_REFERENCES (compAdresse. Ville VARCHAR2(20). LES TYPES ABSTRAITS (COMPLEXES) I Modification d’un ADT • L’ option REPLACE AS OBJECT listeElements – Exemple CREATE OR REPLACE TYPE adresse3_t AS OBJECT( Numero NUMBER(4). Code_Postal NUMBER(5). Page 34 Copyright G. ORDER MEMBER FUNCTION compAdresse (adr IN adresse3_t) RETURN NUMBER. RNDS). Rue VARCHAR2(20). ORDER MEMBER FUNCTION compAdresse (adr IN adresse3_t) RETURN NUMBER. Mopolo-Moké Oracle et le modèle Objet Relationnel . Code_Postal NUMBER(5). WNDS. WNDS. RNPS. RNDS)). nom_rue IN varchar2) return boolean ). RNPS. WNPS. Ville VARCHAR2(20). Member function setRue(self IN OUT adresse3_t.

– Exemple 2 : suppression Alter type adresse3_t drop member function setNumero (self IN OUT adresse3_t. numero1 IN number) return boolean. numero1 IN number) return boolean. LES TYPES ABSTRAITS (COMPLEXES) I Modification d’un ADT • L’ option ajout / suppression de méthodes – 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. Page 35 Copyright G.4. Mopolo-Moké Oracle et le modèle Objet Relationnel .

.)] – Exemple 1 : ajout Alter type adresse3_t add attribute state varchar2(20). LES TYPES ABSTRAITS (COMPLEXES) I Modification d’un ADT • L’option ajout / modification / suppression d’attributs – Syntaxe alter_attribute_definition::= {ADD | MODIFY} ATTRIBUTE attribute datatype [( attribute datatype. .4.. Alter type adresse3_t add attribute(state2 varchar2(20)).)] DROP ATTRIBUTE attribute [( attribute. – Exemple 3 : Suppression Alter type adresse3_t drop attribute state2. Mopolo-Moké Oracle et le modèle Objet Relationnel .. Page 36 Copyright G... – Exemple 2 : Modification Alter type adresse3_t modify attribute state2 varchar2(30).

’Valbonne’. 6560. la modification d’un type n’est possibles qu’en utilisant les options INVALIDATE et CASCADE. ’rue de la gare’. LES TYPES ABSTRAITS (COMPLEXES) I Modification d’un ADT • Les options INVALIDATE et CASCADE. – L’option INVALIDATE permet d’invalider provisoirement tous les objets dépendants. Au prochain accès les objets sont à nouveau validé. ’AM’). Insert into adresse3 values(1. Mopolo-Moké Oracle et le modèle Objet Relationnel . ATTENTION !!! Il faut être sûr des conséquences – Exemple Create table adresse3 of adresse3_t. 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. – L’option CASCADE permet de propager immédiatement la modification sur les objets dépendants. S’il y a des dépendances.4.

4. la modification d’un type n’est possibles qu’en utilisant les options INVALIDATE et CASCADE. 6560. S’il y a des dépendances. ’AM’). INCLUDING DATA est l’option par défaut Page 38 Copyright G.’AM’). 6560. – L’option CASCADE peut être suivi de INCLUDING DATA ou NOT INCLUDING DATA : avec ou sans conversion de données des tables. ’rue de la gare’. ’Nice’. LES TYPES ABSTRAITS (COMPLEXES) I Modification d’un ADT • Les options INVALIDATE et CASCADE. – Exemple 1 : Modification avec INVALIDATE Alter type adresse3_t modify attribute state varchar2(30) invalidate. – Exemple 3 : Modification avec CASCADE Alter type adresse3_t add attribute(state2 varchar2(20)) cascade. Insert into adresse3 values(2. Mopolo-Moké Oracle et le modèle Objet Relationnel . ’Nice’. ’rue de la gare’. Insert into adresse3 values(2. ’AM’.

4. LES TYPES ABSTRAITS (COMPLEXES) I Modification d’un ADT • Limites – Il n’est pas possible de supprimer : • Un attribut d’un super type dans un sous-type • Un attribut dépendant sans l’option cascade ou invalidate • Un attribut utilisé comme clé primaire ou clé de partitionnement – Il n’est pas possible de modifier : • La taille d’un attribut participant à un Index basé sur une fonction. un domaine index ou une clé cluster Page 39 Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel .

LES TYPES ABSTRAITS (COMPLEXES) I Suppression d’un ADT • Il est possible de supprimer un type ou le corps d’un type. Les colonnes ou les attributs définis sur ce type deviennent invalide.4. Page 40 Copyright G. • • Syntaxe pour la suppression du corps d' type un DROP TYPE BODY nomType . – Exemple • DROP TYPE BODY adresse_t. – L’ option VALIDATE permet de vérifier que des instances des super types n’ ont pas étés construits avec le sous-type – Exemple • • • DROP TYPE adresse_t. Mopolo-Moké Oracle et le modèle Objet Relationnel . DROP TYPE Employee_t VALIDATE. Syntaxe pour suppression d' type un DROP TYPE nomType [FORCE | VALIDATE] – L' option FORCE permet de supprimer un type en ignorant les dépendances. DROP TYPE adresse_t FORCE. La suppression du corps d' type permet d' un éviter de supprimer la spécification du type.

Mopolo-Moké Oracle et le modèle 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 d’un type Informations sur les méthodes d' un type Page 41 Copyright G.

Mopolo-Moké Oracle et le modèle Objet Relationnel .4. LES TYPES ABSTRAITS (COMPLEXES) I Visualisation des informations sur les ADT DESCRIPTION Infos sur les index définis par le user NOM DE LA VUE USER_INDEXTYPES USER_INDEXTYPES USER_INDEXTYPES Commentaire sur les index définis (au sens nouveau mécanisme d’ indexation) par le user USER_INDEXTYPE_COMMENTS USER_INDEXTYPE_COMMENTS USER_INDEXTYPE_COMMENTS Information sur l’ opérateur d’ un index défini par l’ utilisateur USER_INDEXTYPE_OPERATORS USER_INDEXTYPE_OPERATORS USER_INDEXTYPE_OPERATORS Page 42 Copyright G.

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.4. Mopolo-Moké Oracle et le modèle Objet Relationnel .

LES TYPES ABSTRAITS (COMPLEXES) I Visualisation des informations sur les ADT 1. Mopolo-Moké Oracle et le modèle Objet Relationnel . methods. Liste des attributs des types créés par l' utilisateur courant SQL> SELECT type_name. attr_type_name FROM user_type_attrs.4. 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. type_oid. local_attributes from user_types. Liste des types créés par l' utilisateur courant sql>select type_name. attr_name. 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. attributes.

C' au programmeur de se limiter à est l' appel de méthodes DONNEES METHODES Page 45 Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel . LES TYPES ABSTRAITS (COMPLEXES) I Encapsulation • L' encapsulation est le principe qui consiste à considérer un objet comme une BOITE NOIRE ACCESSIBLE UNIQUEMENT A TRAVERS LES OPERATIONS DEFINIES sur celle -ci • L' Encapsulation en C++ par exemple est gérée à travers trois mots clés : PRIVATE. PROTECTED et PUBLIC • Le moteur Oracle ne supporte pas l' encapsulation telle que définie.4.

Le constructeur du type ADRESSE_T s’appelle ADRESSE_T. Ses paramètres sont l’ensemble des champs du type • L’ utilisateur peut BRICOLER constructeurs via des Méthodes (jusqu’à la version 8) ses propres STATIQUES Page 46 Copyright G. UPDATE. LES TYPES ABSTRAITS (COMPLEXES) I Constructeur • Un Constructeur est une méthode spéciale ayant le même nom que le type. Mopolo-Moké Oracle et le modèle Objet Relationnel . dans des fonctions PL/SQL).4. • un constructeur sert à la création et à la mise à jour des objets (dans les ordres SQL : INSERT. • Un Constructeur en Oracle est appelable partout ou une méthode peut être appelée • Un constructeur par défaut est disponible.

’0493825084’.50) ). Mopolo-Moké Oracle et le modèle Objet Relationnel . 12000. Page 47 Copyright G. ' de la traverse' rue .4. adresse_t(1. ' ) Nice' Note : . ’Jean DUPOND’. ’NICE’). ’rue Arago’. le // Constructeur adresse_t sera appelé INSERT INTO o_pilote VALUES ( ref_pilote_t(1. • NOTE : l’appel de ref_PILOTE_T(…) est facultatif – Modification via un constructeur UPDATE o_pilote op set op. // Insertion d ’ un élement de la table objet.tous les champs doivent être concernés .il est préférable d' accéder directement à un champ ou via une une méthode ou un autre constructeur si la MAJ ne concerne pas la ligne entière.6000. LES TYPES ABSTRAITS (COMPLEXES) I Constructeur • Exemple : constructeur par défaut – Soit la table objet Pilote de pilote_t: CREATE TABLE o_pilote OF ref_pilote_t.6000. Pour la colonne. ’12-JUN-47’.adr = ref_adresse_t(5.

/ Page 48 Copyright G. Rue VARCHAR2(20). LES TYPES ABSTRAITS (COMPLEXES) I Constructeur • Exemple : constructeur défini par l’utilisateur (jusqu’à la V8) CREATE OR REPLACE TYPE adresse4_t AS OBJECT( Numero NUMBER(4).4. RNDS)). ORDER MEMBER FUNCTION compAdresse (adr IN adresse4_t) RETURN NUMBER. Code_Postal NUMBER(5). WNPS. PRAGMA RESTRICT_REFERENCES (compAdresse. STATIC FUNCTION cons_adresse4_t(numero Number . WNDS. Ville VARCHAR2(20). rue VARCHAR2 ) RETURN Adresse4_t . Mopolo-Moké Oracle et le modèle Objet Relationnel . RNPS.

numero>adr. LES TYPES ABSTRAITS (COMPLEXES) I Constructeur • Exemple : constructeur défini par l’utilisateur(jusqu’à la V8) create or replace type body adresse4_t is STATIC FUNCTION cons_adresse4_t(numero Number . rue. Mopolo-Moké Oracle et le modèle Objet Relationnel . end if. return 0. if self. End.numero<adr.numero then return -1. null. end if. end. null). rue VARCHAR2 ) RETURN Adresse4_t IS begin return adresse4_t(numero.4. ORDER MEMBER FUNCTION compAdresse (adr IN adresse4_t) RETURN NUMBER is begin if self.numero then return 1 . end. / Page 49 Copyright G.

cons_adresse4_t(1. Adr2. ’Josoe’). begin adr2. ’Ifa’). LES TYPES ABSTRAITS (COMPLEXES) I Constructeur • Exemple : constructeur l’utilisateur(jusqu’à la V8) défini par declare adr1 adresse4_t:=adresse4_t(1. 5000. adr2 adresse4_t:=adresse4_t. / Page 50 Copyright G.4. end.code_postal :=10000. ’Alufa’.ville:= ’Jerusalem ’. Mopolo-Moké Oracle et le modèle Objet Relationnel .

6000 ’ Bruxelles ’ ) Tél : ’0493825084’ Dnaiss : ’ 12-10-40 ’ Salaire : 12000. 51 Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel . 75 ’ Paris ’ ) Tél : ’ 0141825084’ Dnaiss : ’ 12-10-45 ’ Salaire : 13200.0 CREATE TABLE r_pilote(pil PILOTE_T). ’ R Arago’ . ’ R Gare’ . LES TYPES ABSTRAITS (COMPLEXES) I Instanciation • Il n’est pas possible d’instancier un type abstrait sinon que dans une table ou dans un programme Type PILOTE_T Attributs ou Champs PL# NOM ADRESSE TEL DNAISS SALAIRE Méthodes getSalaire setSalaire PL# : 1 Nom : Tintin Milou Adresse : (1. / Page pil_var PILOTE_T.0 PL# :2 Nom : Dupond Dupont Adresse : (1.4. Declare Begin End.

Mopolo-Moké Oracle et le modèle Objet Relationnel . NOTION D’IDENTITE I PLAN • Identité sur les tables • Identité sur les vues • Différences entre un OID et ROWID Page 52 Copyright G.5.

5. NOTION D’IDENTITE
I

Identité sur les tables
• Lors de l' insertion d' objet dans la base, un OID ou un Object Identifier lui est affecté. C’est identifiant ne peut changer pendant la durée de vie de l' objet • Seuls les objets des tables ou des vues objets sont identifiés par des OID. Une table Objet est créée avec la commande « CREATE TABLE …. OF … » • Le type référence « REF » permet de stocker des références vers des objets (OID). • Une référence permet de définir les liens entre objets

• Attention! : les OID sont très différents des ROWID!

Page

53

Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel

5. NOTION D’IDENTITE
I

Identité sur les tables

Exemple : Manipulation des références 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 défini préalablement

// 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 modèle Objet Relationnel

5. NOTION D’IDENTITE
I

Identité sur les tables

Exemple : Manipulation des références et la clause RETURNING REF(… ) INTO ... La clause RETURNING... REF(… ) INTO … permet, lors de l’insertion d’une ligne dans une table Objet de capturer à la volée la référence vers cet Objet. L' intérêt 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 modèle Objet Relationnel

5. NOTION D’IDENTITE
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 possèdent des identifiants physiques appelés Primary key OID (pseudo OID) avec leur pendant à la manipulation Primary key REF (pseudo REF) • les vues objets servent entre autre à créer des OID sur les tables relationnelles classiques !!! • Note: voir chap. 10 pour plus de détails sur les vues

Page

56

Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel

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 modèle Objet Relationnel .5. … )] AS sousRequête Mots et paramètres OF nomTypeObjet Description création d' vue objet sur le type une nomTypeObjet permet de spécifier la ou les colonnes utilisées comme clé pour identifier de façon unique les lignes de la vue objet. NOTION D’IDENTITE I Identité sur les vues • Syntaxe de création d' vue object une CREATE OR REPLACE [FORCE] VIEW nomVue OF nomTypeObjet WITH OBJECT IDENTIFIER [DEFAULT | (attribut1. attribut2.

DEFAULT NOTES : . Mopolo-Moké Oracle et le modèle Objet Relationnel . . Attribut2. … sont la clés primaire de la table sous-jascente Page 58 Copyright G. NOTION D’IDENTITE I Identité sur les vues Description attributs permettant d’identifier de façon 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 paramètres Attribut1.les attributs Attribut1. attribut2...5.

nom. NOTION D’IDENTITE I Identité sur les vues Exemple : CREATE table Pilote1 ( PL# NUMBER(4) CONSTRAINT pk_pilote1 PRIMARY KEY. ville CHAR(20)).-. Mopolo-Moké Oracle et le modèle Objet Relationnel .2)).5.adresse. p. adresse adresse_t. // création du type Ville_pil_t CREATE OR REPLACE TYPE Ville_pil_t AS OBJECT( plnum NUMBER(4). Page 59 Copyright G. nom VARCHAR2(12). dnaiss DATE. nom CHAR(20). salaire NUMBER(7. CREATE OR REPLACE VIEW Ville_pil_v OF Ville_pil_t WITH OBJECT IDENTIFIER(plnum) AS -. p.liste de colonnes assurant l’ unicité de la clé select p.ville from Pilote1 p.Pl#.type abstrait défini préalablement Tel VARCHAR2(12).

adresse_t(15. ’0493825084’. NOTION D’IDENTITE I Identité sur les vues Exemple : INSERT INTO pilote1 VALUES (5. REF(V) 000050030A004CAA966C70AF1111D2A64700A0245FEFFD00000 01426010001000100290000000000090604002A0007000000 200200000000000000001602C105000000000000000000000000000 00000000000 000050030A004CAA966C70AF1111D2A64700A0245FEFFD00000 01426010001000100290000000000090604002A0007000000 200200000000000000001602C106000000000000000000000000000 00000000000 Page 60 Copyright G. 15000. SQL> SELECT * FROM ville_pil_v. ’11/08/64’.5. PLNUM 4 5 NOM Milou TINTIN Milou TINTIN VILLE Cap Cap SQL> SELECT REF(v) FROM ville_pil_v v. ’Av Mars’. ’CAP’). Mopolo-Moké Oracle et le modèle Objet Relationnel .5). 75000. ’Milou TINTIN’.

NOTION D’IDENTITE I Différence entre un OID et un ROWID Critère Taille ROWID 10 OID 16 OUI NON OUI identifiant immuable NON Sert à indexer partage d' objets OUI NON SQL> SELECT REF(op). Mopolo-Moké Oracle et le modèle Objet Relationnel . REF(OP) ROWID 000028020985B3AD5BB8C04D39BF81C8DB5573EFE53AFC0C48 6CA3447283858183F28672A6020001 B20000 AAAIFzAAIAAAAGyAAA 0000280209A36782FB22EE44409D6560943CFD7A433AFC0C486 CA3447283858183F28672A6020001 B20001 AAAIFzAAIAAAAGyAAB Page 61 Copyright G.5. ROWID FROM o_ref_pilote op.

NOTION DE COLLECTION I PLAN • Généralités • Les tableaux variables (VARRAY) • Les tables imbriquées (Nested Table) • Indexation d’une Nested Table • Stockage d’une Nested Table • Méthodes sur les Collections • Comparaison entre VARRAY et Nested Table Page 62 Copyright G.6. Mopolo-Moké Oracle et le modèle Objet Relationnel .

.Des types de données élémentaires. . Mopolo-Moké Oracle et le modèle Objet Relationnel .Des types de données abstraits. NOTION DE COLLECTION I Généralités • Deux types de collections : .6.Les tableaux de longueur variable (VARRAY) ANSI SQL.Des références vers des types de données abstraits. . Page 63 Copyright G. • Une collection peut contenir : .Ensemble Multiple ou Bag (Nested Table) ANSI standard.

Mopolo-Moké Oracle et le modèle Objet Relationnel . • Syntaxe CREATE [OR REPLACE ] TYPE nomType AS {VARRAY | VARYING ARRAY} (nombreMaxD’éléments) OF typeDeDonnées Page 64 Copyright G. Chaque élément a une valeur et occupe une position unique. NOTION DE COLLECTION I Les tableaux variables (VARRAY) • Définition d’un VARRAY – Un « varying ARRAY » est un ensemble d’éléments ordonnés de même type.6.

AvType VARCHAR2(45). / CREATE TYPE avions_t AS VARRAY (5) OF avion_t . avions AVIONS_T). Loc VARCHAR2(20). -. Page 65 Copyright G.Chaque colonne ‘avions’ est un tableau de 5 éléments de avions_t CREATE TABLE hangar ( hangar# NUMBER(2) .Création d' table contenant un VARRAY une -. Mopolo-Moké Oracle et le modèle Objet Relationnel .6. NOTION DE COLLECTION I Les tableaux variables (VARRAY) Exemple de Création d' VARRAY un CREATE TYPE avion_t as object ( Av# NUMBER(4). Cap NUMBER(4)).

300).320)) WHERE hangar#=2 . ’PARIS’. avion_t ( 5.320)) Mise à jour d' VARRAY. Mopolo-Moké Oracle et le modèle Objet Relationnel . ’AIRBUS’. LOC. ’NICE’. ’AIRBUS’. ’AIRBUS’. HANGAR# AVIONS(AV#. ’CARAVELLE’. ’AIRBUS’.320))) . 300)) 3 AVIONS_T(AVION_T(3. avions_t (avion_t ( 2. ’PARIS’. ’PARIS’.300) )) .6. avion_t ( 5. 300)) 2 AVIONS_T(AVION_T(2. un UPDATE hangar SET avions =avions_t(avion_t ( 4. CAP) 1 AVIONS_T(AVION_T(1. ’AIRBUS’. ’PARIS’. ’NICE’. avions_t (avion_t ( 1. AVTYPE. avions_t (avion_t ( 3. ’NICE’. NOTION DE COLLECTION I Les tableaux variables (VARRAY) Exemple d’insertion dans une table avec un VARRAY INSERT INTO hangar VALUES (1. ’AIRBUS’.320))) . ’NICE’. INSERT INTO hangar VALUES (2. Page 66 Copyright G. ’AIRBUS’.320). Exemple de consultation d’une table avec un VARRAY SQL>SELECT * FROM hangar. INSERT INTO hangar VALUES (3.’PARIS’. ’AIRBUS’.

dans les Ordres SQL (UPDATE.si un VARRAY est trop grand. INSERT. Mopolo-Moké Oracle et le modèle Objet Relationnel .La mise à jour d' élément particulier est possible un dans PL/SQL Page 67 Copyright G.6. il peut être stocké en dehors du segment de la table . un VARRAY est manipulable comme un TOUT . DELETE).Un constructeur d ’ objet existe aussi sur un type VARRAY .Le stockage d’ un VARRAY se fait à l’ intérieur de la table ou il a été déclaré . NOTION DE COLLECTION I Les tableaux variables (VARRAY) • Quelques contraintes et informations : .

• Caractéristiques – Une Nested Table peut être un champ. un attribut. une variable ou un paramètre dont le type de donnée est un « type table ». NOTION DE COLLECTION I Les tables imbriquées (Nested Table) • Définition d’une nested table (bag ou set) – Les nested tables sont des tables imbriquées efficaces pour la gestion des relations maître-détail. Mopolo-Moké Oracle et le modèle Objet Relationnel .6. – Les Store Tables sont des segments physiques où sont stockés les instances des Nested Tables Page 68 Copyright G.

NOTION DE COLLECTION I Les tables imbriquées (Nested Table) • Représentation schématique PL# PLNOM ADR Téléphone Salaire 1 Tintin @1 012222111 10000..0 4 Dragon bol @. 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 imbriquée Page 69 Copyright G. du Congrès 06100 Nice @2 @2 15 av. 233399 15000.6..0 3 Bleck @3 222222 12500.0 @1 Nested_table_id Numéro Rue Code Postal Ville @1 60 r. Mopolo-Moké Oracle et le modèle Objet Relationnel .0 2 Zembla @2 5551111 23000.

Création d’ un type table sur le type vol_t CREATE OR REPLACE TYPE ref_Vol2_t AS OBJECT ( Vol# NUMBER(4). Mopolo-Moké Oracle et le modèle Objet Relationnel . VD VARCHAR2(20). --type abstrait défini préalablement CREATE OR REPLACE TYPE REF vol2_set_t AS TABLE OF REF ref_vol2_t . NOTION DE COLLECTION I Les tables imbriquées (Nested Table) • Création d' type Table un CREATE OR REPLACE TYPE nomType AS TABLE OF typeDesElements • Exemple -. . Page 70 Copyright G. Pilote REF ref_pilote_t).6. VA VARCHAR2(20).

Av_cap NUMBER(3). NOTION DE COLLECTION I Les tables imbriquées (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 -. Av_loc VARCHAR2(20). NOTE : dans ce modèle un VOL n' existe que parce qu' ya un il PILOTE. Av_liste_vol Vol2_set_t) . Av_type VARCHAR2(12). Av_rem CLOB. Page 71 Copyright G.6.Utilisation du type table VOL2_SET_T CREATE OR REPLACE TYPE Avion2_ns_t AS OBJECT( Av_num NUMBER(3). Mopolo-Moké Oracle et le modèle Objet Relationnel .

6. NOTION DE COLLECTION I Les tables imbriquées (Nested Table) • Création d' STORE TABLE pour stocker les une objets d’une table imbriquée. Av_cap NUMBER(3). Une STORE TABLE est une table dont l' accès aux LIGNES se fait uniquement à travers la table qui la contient. Av_liste_vol Vol2_set_t) NESTED TABLE av_liste_vol STORE AS storeVols2Set. Page 72 Copyright G. Av_loc VARCHAR2(20). CREATE TABLE avion2_ns OF Avion2_ns_t NESTED TABLE Av_liste_vol STORE AS vols2_set .Table non Objet avec Table imbriquée CREATE TABLE Avion2_ns ( Av_num NUMBER(3). Av_type VARCHAR2(12).Table objet avec Table imbriquée. Av_rem CLOB. Mopolo-Moké Oracle et le modèle Objet Relationnel . Exemple -. -.

variable. NOTION DE COLLECTION I Les tables imbriquées (Nested Table) : CARACTERISTIQUES • ces tables sont accessibles indirectement que via un SELECT. Mopolo-Moké Oracle et le modèle Objet Relationnel . paramètre ou résultat en PL/SQL.6. attribut d' ADT. INSERT • Oracle étend le relationnel au niveau domaine (EF Codd) • Un TYPE TABLE est nécessaire pour créer une NESTED TABLE • Il peut être utilisé comme type de données dans les déclarations suivantes : colonne SQL. UPDATE. Page 73 Copyright G.

6. Av_rem CLOB).retourne une table dont les éléments sont une liste de valeurs (la valeur NULL est permise).appelé sans argument pour construire une table vide. . NOTION DE COLLECTION I Les tables imbriquées (Nested Table) • Un constructeur par défaut est fourni pour construire les objets d' NESTED TABLE. Page 74 Copyright G.du même nom que le type de la table. Av_type VARCHAR2(12). Av_cap NUMBER(3). Av_loc VARCHAR2(20). CREATE OR REPLACE TYPE avion3_set_t AS TABLE OF avion3_t . Mopolo-Moké Oracle et le modèle Objet Relationnel . . Exemple CREATE OR REPLACE TYPE Avion3_t AS OBJECT ( Av_num NUMBER(3). il doit une être du même type : .

NICE' .insertion dans la table hangar3 INSERT INTO hangar3 VALUES (1. h. -. t1.av_num. t1.hangar# = 1 . -.Création d' table avec une colonne de type table une CREATE TABLE hangar3 ( hangar# number(2). t1.avion3_set_t()) .av_loc. NOTION DE COLLECTION I Les tables imbriquées (Nested Table) Exemple (suite) -.consultation de la table hangar3 SELECT t1. -. ' AIRBUS'' . Mopolo-Moké Oracle et le modèle Objet Relationnel .avions = avion3_set_t (avion3_t (1. null) ) WHERE h.6.av_type. AV_NUM AV_TYPE 1 AIRBUS AV_LOC NICE AV_CAP 300 Page 75 Copyright G.modification de la table hangar3 UPDATE hangar3 h SET -.av_cap FROM table(SELECT avions FROM hangar3 WHERE hangar#=1) t1.300.hangar est la table définie préalablement. avions avion3_set_t) NESTED TABLE avions STORE AS store_avion3_set .

AV_LOC. est EXEMPLE CREATE TABLE avion3s OF avion3_t. AV_REM) AVION3_SET_T(AVION3_T(1.consultation de la table Avion3s.300. NULL)) Page 76 Copyright G. null) )) . 300. Mopolo-Moké Oracle et le modèle Objet Relationnel . null) ). ’NICE’. ’AIRBUS’. AV_TYPE. -. SELECT * FROM avion3s. AV_NUM AV_TYPE 1 AIRBUS AV_LOC NICE AV_CAP AV_REM 300 SELECT avions FROM hangar3. NULL)) AVION3_SET_T(AVION3_T(2. ’NICE’. INSERT INTO hangar3 VALUES (2. ’NICE’. AVIONS(AV_NUM. AV_CAP. INSERT INTO AVION3S VALUES (avion3_t (1.300.6. ’AIRBUS’. avion3_set_t( avion3_t (2. ’NICE’. il est nécessaire de stocker les références dans une Nested Table. NOTION DE COLLECTION I Les tables imbriquées (Nested Table) • Afin d' éviter les duplications. 300. ’CARAVELLE’. ’CARAVELLE’. Ce qui n' pas le cas ici car il ya duplication des AVIONS.

Mopolo-Moké Oracle et le modèle Objet Relationnel . NOTION DE COLLECTION I Indexation d’une Nested Table • Les éléments associés à un objet par exemple <la liste des avions dans un Hangar ou la liste des vols d' un Pilote >lorsqu' sont modélisés à travers des Nested ils Tables. sont stockés de façon non ordonnée et non contigüe 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' accélérer l' en accès • Une colonne implicite NESTED_TABLE_ID permet d' identifier les éléments de la Nested Table ayant un même parent. • Un identifiant UNIQUE pour la Nested Table peut être obtenu en créant un INDEX CONCATENE qui inclu la colonne Nested_table_Id et d' autres colonnes Page 77 Copyright G.6.

6. Mopolo-Moké Oracle et le modèle Objet Relationnel . av_type). NOTION DE COLLECTION I Indexation d’une Nested Table • Création d' index sur la COLONNE implicite un NESTED_TABLE_ID de la NESTED TABLE "Avions"de la table HANGAR3. • Création d' index unique sur une Nested Table un – CREATE UNIQUE INDEX IDX_UNIQUE_STORE_AVION3_SET ON STORE_AVION3_SET(nested_table_id. Page 78 Copyright G. – CREATE INDEX IDX_STORE_AVION3_SET ON STORE_AVION3_SET(NESTED_TABLE_ID).

Mais on peut lui assigner ses propres paramètres de stockage • Exemple – ALTER TABLE store_avion3_set STORAGE (initial 10K next 10K pctincrease 0). avions avion3_set_t) TABLESPACE TOOLS NESTED TABLE avions STORE AS store_avion4_set STORAGE ( initial 10 next 14K). – CREATE TABLE hangar4 ( hangar# number(2). Mopolo-Moké Oracle et le modèle Objet Relationnel .6. NOTION DE COLLECTION I Stockage d’une Nested Table • Une Nested Table est stockée dans un segment de données séparé de celui de la table qui le contient • Il n' pas possible de localiser une Nested Table est dans un TABLESPACE indépendant. Page 79 Copyright G.

6.i]) TRIM(n) DELETE(m[. Mopolo-Moké Oracle et le modèle Objet Relationnel . n]) Description rend vrai si n-ième élément existe nombre d' éléments courants nombre maximum d' éléments rend l' index du 1er ou dernier élément rend l' index de l' élément précédent ou suivant ajout de n éléments NULL ou n éléments recopiés à partir de i supprime n élément à partir de la fin d' collection une supprime m éléments entre m et n Page 80 Copyright G. NOTION DE COLLECTION I Méthodes sur les collections Nom EXISTS (n) COUNT LIMIT FIRST and LAST PRIOR and NEXT EXTEND(n[.

… IF (arrayAvions.LIMIT THEN -.6. -. --suppression de tous les éléments Page 81 Copyright G.DELETE(3.--suppression de l' élément 3 à l' élément 6 arrayAvions.1).. NOTION DE COLLECTION I Méthodes sur les collections • Exemples depuis PL/SQL IF listVols.--ajout de 5 élém.6).NEXT(i)). --suppression de l' élément 2 listVols.DELETE(2).LAST LOOP … projects(i) := projects.EXISTS(i) THEN listVols(i) := nouveau_vol. recopiés à partir de 1 listVols.EXTEND(5.affectation de l' élément i listVols.PRIOR(projects. Mopolo-Moké Oracle et le modèle Objet Relationnel .FIRST. listVols.ajouter 20 éléments FOR i IN listVols.COUNT + 20) < arrayAvions.DELETE.

i number :=1. / Page 82 Copyright G.put_line (’AVION [’ || i || ’] =’ || lav(i)).av# || ’ ’ || lav(i). lav.count THEN exit. BEGIN SELECT avions INTO lav FROM hangar where hangar#=2.limit).put_line (lav(i).6. NOTION DE COLLECTION I Méthodes sur les collections Accès aux élements d ’un VARRAY à Partir de PL/SQL BEGIN DECLARE lav avions_t. i := i + 1. dbms_output. END LOOP. END. Mopolo-Moké Oracle et le modèle Objet Relationnel . update hangar set avions=lav where hangar#=2. LOOP -.avtype).count || ’LIMIT =’ || lav.av#=20.put_line(’COUNT=’ || lav. IF i = lav. END IF.dbms_output. dbms_output. END.

NOTION DE COLLECTION I Comparaison entre VARRAYS et NESTED TABLE Nested Table Se comporte comme un ensemble Stockée dans des segments physiques différents VARRAYs Collection ordonnée Stocké dans le même segment que le contenu de la table ou dans un segment séparé N’ autorise pas les indexes Autorise les indexes Adapté pour un nombre limité de données Adaptée pour un nombre illimité de données Page 83 Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel .6.

CREATION ET MANIPULATION D’OBJETS I PLAN • Généralités • Création et manipulation des tables objets • Insertion dans une table objet • Consultation d’une table objet • Mise à jour dans une table objet • Contraintes d’intégrité dans les tables objets • Les nouveaux Opérateurs DML • Les nouvelles Extensions DML Page 84 Copyright G.7. Mopolo-Moké Oracle et le modèle Objet Relationnel .

CAST. … ) sont introduits pour faciliter la manipulation des objets Page 85 Copyright G.7. MULTICAST. les tables Relationnelles sont identifiées uniquement par les ROWID • De nouveaux opérateurs et mots clés(TABLE. Mopolo-Moké Oracle et le modèle Objet Relationnel . REF. RETURNING. CREATION ET MANIPULATION D’OBJETS I Généralités • Oracle propose à partir d' Oracle V8 deux types de tables : les tables Objets et les tables relationnelles traditionnelles • Les tables objets sont identifiées par les OID et les ROWID.

CREATION ET MANIPULATION D’OBJETS I Création et manipulation des tables objets • Définition Une table objet est une table dont les objets (lignes) ont chacun un identifiant (OID) unique et immuable.adresse_t type abstrait défini préalablement CREATE TABLE o_pilote4 OF pilote4_t . -.7. • Création d’une table Objet – La création 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). salaire NUMBER(7.2)). nom VARCHAR2(12). dnaiss DATE. Mopolo-Moké Oracle et le modèle Objet Relationnel . Tel VARCHAR2(12). adresse ADRESSE_T. Page 86 Copyright G.

la colonne p est un attribut de type pilote4_t Mais r_pilote 4 n ’ est pas une table objet.7. Mopolo-Moké Oracle et le modèle Objet Relationnel . Page 87 Copyright G. -. CREATION ET MANIPULATION D’OBJETS I Création et manipulation des tables objets • Création d’une table Objet – Contre exemple CREATE TABLE r_pilote4 ( p pilote4_t ).

' 0493825096'' . ’0493825084’.50) ).50) ). CREATION ET MANIPULATION D’OBJETS I Insertion d’une table objet • L’ insertion se fait avec la commande INSERT INTO … . ' VALBONNE' ). 12-JUN-57'16000. .6000. ' Alain DURAND' .6560. adresse_t(1. ’12-JUN-47’. ’rue Arago’. Note : l’insertion dans la table non objet r_pilote sera faite de la même façon INSERT INTO r_pilote4 VALUES ( pilote4_t(1. Page 88 Copyright G. VALUES avec ensuite application du constructeur • Exemple : INSERT INTO o_pilote4 VALUES ( pilote4_t(1. adresse_t(1. Mopolo-Moké Oracle et le modèle Objet Relationnel .7. ' Traverse des Brucs' . ’Jean DUPOND’. ’NICE’). 12000.

p.p.7. adresse FROM o_pilote4 WHERE nom = ' DUPOND' Jean . WHERE … • Exemple SELECT nom. ’rue Arago’.VILLE) Jean DUPOND ADRESSE_T(1.nom. Mopolo-Moké Oracle et le modèle Objet Relationnel .r.VILLE) Alain DURAND ADRESSE_T(1. CREATION ET MANIPULATION D’OBJETS I Consultation d’une table objet • La consultation se fait avec la commande SELECT * FROM … . CODE_POSTAL. P.nom = ’Alain DURAND’ . RUE. 6560.consultation d’une table relationnelle avec type complexe Select r. NOM ADRESSE(NUMERO.ADRESSE(NUMERO.NOM P. CODE_POSTAL.adresse From r_pilote4 r Where r. RUE. 6000.p. ’VALBONNE’) Page 89 Copyright G. ’Traverse des Brucs’. ’NICE’) -.

ref(o). nom FROM o_pilote4 o WHERE o. NOM REF(O) Jean DUPOND ROWID AAAAw/AAFAAAAJWAAA 00002802096ABAF6D9B23511D2A64E00A0245FEFFD6ABA F6D8B23511D2A64E00A0245FEFFD014002560000 Page 90 Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel . CREATION ET MANIPULATION D’OBJETS I Consultation d’une table objet • Une table relationnelle ne contient pas d' OID à la différence d' table Objet une • Exemple SELECT rowid.nom = ' DUPOND' Jean .7.

ERROR at line 1: ORA-00904: invalid column name r Select r. P.nom = ' Alain DURAND’ . Mopolo-Moké Oracle et le modèle Objet Relationnel .7.nom = ’Alain DURAND’ . CREATION ET MANIPULATION D’OBJETS I Consultation d’une table objet • une table relationnelle ne contient pas d' OID à la différence d' table Objet une • Exemple : l’opérateur REF ne s' applique pas ici Select r. ref(r ) From r_pilote4 r Where r. rowid From r_pilote4 r Where r.p.nom.p. rowid.p.nom.p.NOM Alain DURAND ROWID AAAAxBAAFAAAAJgAAA Page 91 Copyright G.

Les Colonnes peuvent être mises à jour directement. CREATION ET MANIPULATION D’OBJETS I Mise à jour d' table objet une • La commande utilisée pour les mises à jour est UPDATE … SET … [WHERE … ]. Page 92 Copyright G. UPDATE o_pilote4 o SET o.numero = 22 WHERE o.nom= ’Jean DUPOND’ .7. Mopolo-Moké Oracle et le modèle Objet Relationnel .adresse. à travers des constructeurs ou à travers des méthodes • Exemple de maj sans utilisation de constructeurs UPDATE o_pilote4 SET Tel = ’0493825095’ WHERE nom= ’Jean DUPOND’ .

rue FROM o_pilote4 o WHERE o. NOM ADRESSE.nom= ’Jean DUPOND’ . Mopolo-Moké Oracle et le modèle Objet Relationnel .NUMERO ADRESSE.adresse=adresse_t( 22. ’Mt Doc’) WHERE o.nom= ’Jean DUPOND’.numero.adresse.adresse.RUE Jean DUPOND 22 Mariner Note : l’utilisation d’un constructeur oblige à renseigner tous les champs Page 93 Copyright G.’Mariner’. o.7.nom. CREATION ET MANIPULATION D’OBJETS I Mise à jour d' table objet une • Exemple de MAJ via un CONSTRUCTEUR UPDATE o_pilote4 o SET o. o. ’06555’. SELECT o.

}) ALTER TABLE nomTableObjet ADD ContrainteDeNiveauTable. CREATE TABLE nomTableObjet OF nomType ( {{colonne | attribut} [DEFAULT expr] [contrainteDeNiveauColonne]. CHECK • Ces contraintes peuvent être exprimées pendant la création de la table ou pendant sa mise à jour. | contrainteDeNiveauTable. NULL. Mopolo-Moké Oracle et le modèle Objet Relationnel .7. CREATION ET MANIPULATION D’OBJETS I Contraintes d’intégrité dans les tables objets • Les tables Objets supportent les constraintes d’intégrités : – d’entité : clé primaire – de référence : clé étrangère – de domaine : NOT NULL.. .. Page 94 Copyright G.

CREATION ET MANIPULATION D’OBJETS I Contraintes d’intégrité dans les tables objets • Exemple de définition de contraintes lors de la création d' table une CREATE TABLE o_pilote5 OF pilote4_t( CONSTRAINT nl_nom nom NOT NULL. CONSTRAINT chk_dnaiss CHECK(dnaiss<to_date(’12-OCT-1998’. Mopolo-Moké Oracle et le modèle Objet Relationnel . ’DDMON-YYYY’)). CONSTRAINT nl_adresse adresse NOT NULL.rue IS NOT NULL) ). CONSTRAINT nl_adresse_rue CHECK(adresse.7. NOTE : Il n’est pas possible de poser des contraintes au niveau TYPE Page 95 Copyright G. CONSTRAINT chk_salaire CHECK (salaire >2000 AND Salaire<70000). CONSTRAINT pk_o_pilote5 PRIMARY KEY(pl#).

. TREAT. Mopolo-Moké Oracle et le modèle Objet Relationnel . CAST..7. pour manipuler des objets complexes • Les opérateur CAST. REF. MULTISET seront traités dans le chapitre sur les liens d’ association • L’ opérateur MAKE_REF est traité dans le chapitre sur les vues • Les opérateurs TREAT. Utiliser TABLE à la place Page 96 Copyright G. REFTOHEX. SYS_TYPEID seront traités dans le chapitre sur l’ héritage • Note : – l' opérateur THE est devenu Obsolète. DEREF.. TABLE. CREATION ET MANIPULATION D’OBJETS I Les Nouveaux Opérateurs DML • Oracle propose de nouveaux opérateurs tels que THE. MULTISET. IS OF TYPE. SYS_TYPEID. . IS OF TYPE . MAKE_REF. VALUE.

adresse.nom LIKE ’%DUPOND%’. CREATION ET MANIPULATION D’OBJETS I Les Nouveaux Opérateurs DML • L’ opérateur VALUE – Cet opérateur permet d’ accéder à la VALEUR d’ un objet créé via une TABLE OBJET. -.p.table non objet SELECT VALUE (p) FROM o_pilote4 p -.table objet WHERE p.p. – Exemple INSERT INTO r_pilote4 -. Mopolo-Moké Oracle et le modèle Objet Relationnel .ADRESSE.VILLE Jean DUPOND Mt Doc Page 97 Copyright G.p.consultation de la table non objet r_pilote4 SELECT rp.NOM P.7.nom. P.ville FROM r_pilote4 rp where rp.nom like ’%DUPOND%’. rp.

CREATION ET MANIPULATION D’OBJETS I Les Nouveaux Opérateurs DML • L’ opérateur REF – L’opérateur REF permet de connaître l’identité de l’objet référencé.table objet WHERE px.7.nom = ’Jean DUPOND’. PX 0000280209E4715187332C11D1A51300A0245FEFFDE47 15186332C11D1A51300A0245FEFFD0140010C0000 Page 98 Copyright G. – Exemple SELECT REF (px) FROM o_pilote4 px -. Mopolo-Moké Oracle et le modèle Objet Relationnel .

– Exemple : -. FROM o_pilote4 p WHERE p.7. REF pilote4_t). Mopolo-Moké Oracle et le modèle Objet Relationnel .Création de la table vol4 CREATE TABLE Vol4 ( Vol# VD VA Pilote NUMBER(4) PRIMARY KEY. ' PARIS'' .nom =' DUPOND' Jean . INSERT INTO vol4 SELECT 200. Page 99 Copyright G. VARCHAR2(20). VARCHAR2(20). CREATION ET MANIPULATION D’OBJETS I Les Nouveaux Opérateurs DML • L ’ opérateur DEREF – Retourne la valeur de l’ objet identifié par la référence. TOULOUSE'REF(p) .

RUE. DEREF(PILOTE)(PL#. ADRESSE_T(22. ’0493825095’. ’Jean DUPOND’. ’Mariner’. VILLE). ADRESSE(NUMERO. DNAISS. CODE_POSTAL. SALAIRE) PILOTE4_T(1. Mopolo-Moké Oracle et le modèle Objet Relationnel .Déréférencement d' référence une SELECT DEREF (Pilote) FROM Vol4 WHERE VD = ' PARIS' . TEL. ’12-JUN-47’. NOM. ’Mt Doc’). CREATION ET MANIPULATION D’OBJETS I Les Nouveaux Opérateurs DML • L ’ opérateur DEREF – Exemple (suite) : -. 6555. 12001) Page 100 Copyright G.7.

Begin INSERT INTO o_pilote4 op VALUES ( pilote4_t(3. Mopolo-Moké Oracle et le modèle Objet Relationnel .7. 0493825033'' .. – Récupère la référence d’un nouvel enregistrement lors d’une insertion dans une table objet. RETURNING REF(op) INTO pil_ref. rue . / Page 101 Copyright G. Nice' end.6000. .Insertion d ’ un pilote et d ’ un vol dans un programme PL/SQL declare pil_ref REF pilote4_t. pil_ref) . 12-AUG-64'10000. INSERT INTO vol4 VALUES (400. ' Paris'' .5)) . ' du Port' Jean . CREATION ET MANIPULATION D’OBJETS I Nouvelles Extensions DML • L’extension RETURNING REF(… ) INTO . Ne peut être utilisé que dans une instruction INSERT et ne doit renvoyer qu’ une seule valeur – Exemple -.. ' ADAMS'adresse_t(3. ' NICE' ' ).

Mopolo-Moké Oracle et le modèle Objet Relationnel . CREATION ET MANIPULATION D’OBJETS I Nouvelles Extensions DML • L’opérateur REFTOHEX – Permet de convertir explicitement une référence en une chaîne Hexadécimale – Exemple Select pilote from vol4.7. PILOTE 00002202085793DF953AEE494F96D4165C98E440 A32DC775DDC8F54618A57420A774CDCACC Select REFTOHEX(pilote) from vol4. REFTOHEX(PILOTE) 00002202085793DF953AEE494F96D4165C98E440 A32DC775DDC8F54618A57420A774CDCACC Page 102 Copyright G.

Mopolo-Moké Oracle et le modèle Objet Relationnel . CREATION ET MANIPULATION D’OBJETS 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.7.

Mopolo-Moké Oracle et le modèle Objet Relationnel . LIENS D’ASSOCIATIONS I PLAN • Généralités • Gestion des liens d’associations Via les références • Définition des contraintes d' intégrités • Limitation de la visibilité des Références (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 références • Autres considérations Page 104 Copyright G.8.

8. Mopolo-Moké Oracle et le modèle Objet Relationnel . • La mise en oeuvre des liens d' associations se fait à travers la notion de Référence • Peuvent être qualifiés de jointure « cablée » • Peuvent être posés au niveau table ou au niveau Type • Doivent être entièrement gérés par le développeur Page 105 Copyright G. LIENS D’ASSOCIATIONS I Généralités • 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.

8. Page 106 Copyright G. 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 : . LIENS D’ASSOCIATIONS I Gestion des liens d’associations Via des réferences -. / --Création de type table (liste de vol) : Les éléments de cette liste sont des références vers des vols. Mopolo-Moké Oracle et le modèle Objet Relationnel .La colonne implicite COLUMN_VALUE d’ une Collection permet de manipuler les éléments de la liste.Déclaration Forward des Types afin d' éviter l' interblocage dû au reférencement mutuel entre types CREATE OR REPLACE TYPE VOL6_T.

Av_rem CLOB. Av_liste_vols Set_Vol6_t) / Page 107 Copyright G. salaire number(7. Av_loc VARCHAR2(20). Av_cap NUMBER(3). nom VARCHAR2(12). LIENS D’ASSOCIATIONS I Gestion des liens d’associations Via des références --Création du type PILOTE6_T avec un champ multivalué Pil_Liste_vols CREATE OR REPLACE TYPE Pilote6_t AS OBJECT ( PL# NUMBER(4).8. adresse adresse_t. Tel VARCHAR2(12). dnaiss DATE.2). PIL_liste_vols Set_Vol6_t) / --Création du type AVION6_T avec un champ multivalué Av_Liste_vols CREATE OR REPLACE TYPE Avion6_t AS OBJECT( Av# NUMBER(3). Mopolo-Moké Oracle et le modèle Objet Relationnel . Av_type VARCHAR2(12).

LIENS D’ASSOCIATIONS I Gestion des liens d’associations Via des réferences --Création du type VOL6_T avec 2 champs de type REF CREATE OR REPLACE TYPE Vol6_t AS OBJECT( Vol# NUMBER(4). VD VARCHAR2(20). refPilote REF pilote6_t. Pilote# NUMBER(4). refAvion REF avion6_t ) / Page 108 Copyright G.8. VA VARCHAR2(20). Avion# NUMBER(4). Mopolo-Moké Oracle et le modèle Objet Relationnel .

CONSTRAINT chk_salaire6 CHECK (salaire >2000 AND Salaire<70000) ) NESTED TABLE Pil_liste_vols STORE AS store_pil_liste_vols.8. Page 109 Copyright G. LIENS D’ASSOCIATIONS I Définition des contraintes d' intégrités • La Définition des contraintes d' intégrité d' Entité. de Référence et de domaine reste possible • Exemple CREATE TABLE PILOTE6 OF PILOTE6_T( CONSTRAINT pk_pilote6 pl# PRIMARY KEY. Mopolo-Moké Oracle et le modèle Objet Relationnel . CREATE TABLE AVION6 OF AVION6_T( CONSTRAINT pk_avion6 av# PRIMARY KEY ) NESTED TABLE av_liste_vols STORE AS store_av_liste_vols.

LIENS D’ASSOCIATIONS I Définition des contraintes d' intégrités • Exemple CREATE TABLE VOL6 OF VOL6_T( CONSTRAINT pk_vol6 VOL# PRIMARY KEY. Mopolo-Moké Oracle et le modèle Objet Relationnel . Page 110 Copyright G. CONSTRAINT fk_pilote6 FOREIGN KEY (Pilote#) REFERENCES Pilote6. CONSTRAINT fk_avion6 FOREIGN KEY (Avion#) REFERENCES AVION6 ).8.

On peut aussi parler d' intégrité de REFERENCE sur les REFs • La taille d' référence limitée via SCOPE FOR est une de 16 Octets. Page 111 Copyright G. Au lieu de 42 pour un REF normal ALTER TABLE STORE_AV_LISTE_VOLS ADD (SCOPE FOR (column_value) IS VOL6). ALTER TABLE VOL6 ADD (SCOPE FOR (refAvion) IS AVION6). Mopolo-Moké Oracle et le modèle Objet Relationnel .8. ALTER TABLE STORE_PIL_LISTE_VOLS ADD (SCOPE FOR (column_value) IS VOL6). ALTER TABLE VOL6 ADD (SCOPE FOR (refPilote) IS PILOTE6). LIENS D’ASSOCIATIONS I Limitation de la visibilité des Références (SCOPE FOR) et création de tables • Le mot clé SCOPE FOR permet de limiter la visibilité des références à une table particulière.

50. Page 112 Copyright G. ’Bruxelles’). 12000. ’NICE’). LIENS D’ASSOCIATIONS I Insertion à travers les liens • Insertion dans la table objet PILOTE6 INSERT INTO PILOTE6 VALUES ( pilote6_t( 1. set_vol6_t()) ). ’rue de la Gare’. INSERT INTO PILOTE6 VALUES ( pilote6_t( 2.6000. ’12-JUN-47’.8.6000. adresse_t(1. ’rue Arago’. ’12-JUN-47’. ’0493825084’. ’0493825084’. set_vol6_t()) ). Mopolo-Moké Oracle et le modèle Objet Relationnel . ’Jean DUPOND’. adresse_t(1. 12000. ’Milou TINTIN’.50.

’Nice’.’AIRBUS’.300. ’Paris’. null. ’Paris’. set_vol6_t())) . Page 113 Copyright G.300.’DC10’.130. Mopolo-Moké Oracle et le modèle Objet Relationnel .’Caravelle’. set_vol6_t())) .8. INSERT INTO AVION6 VALUES ( AVION6_t(2. null. LIENS D’ASSOCIATIONS I Insertion à travers les liens • Insertion dans la table objet AVION6 INSERT INTO AVION6 VALUES ( AVION6_t(1. INSERT INTO AVION6 VALUES ( AVION6_t(3. null. set_vol6_t())) .

LIENS D’ASSOCIATIONS I Insertion à travers les liens • Insertion dans la table objet VOL6 -. Mopolo-Moké Oracle et le modèle Objet Relationnel . ’Nice’.1. Page 114 Copyright G. null FROM pilote6 px WHERE px. 1. UPDATE VOL6 SET refAvion = (SELECT REF(av) FROM avion6 av WHERE av.av#=1) WHERE vol#=300.8.Approche 1: Insertion suivie d’une MAJ INSERT INTO VOL6 SELECT 300. ’Paris’.pl# = 1. REF(px).

1. REF(px). 2. Avion6 ax WHERE px. ’Nice’.Approche 2 : insertion seule INSERT INTO VOL6 SELECT 350. ’Lille’. Avion6 ax WHERE px. INSERT INTO VOL6 SELECT 450. 1. Mopolo-Moké Oracle et le modèle Objet Relationnel . ’Nice’.8. REF(ax) FROM pilote6 px. REF(ax) FROM pilote6 px. LIENS D’ASSOCIATIONS I Insertion à travers les liens • Insertion dans la table objet VOL6 -. 2.av#=1. ’Lille’.pl# =1 AND ax. REF(px).av# =2.pl# = 2 AND ax. Page 115 Copyright G.

Pil_liste_vols FROM pilote6 p WHERE p. Page 116 Copyright G.--refPilote. Mopolo-Moké Oracle et le modèle Objet Relationnel . 1 assure 2 VOLS INSERT INTO TABLE(SELECT p.pl# = 1) SELECT REF(v) FROM Vol6 v WHERE pilote# = 1.pl# = 2) lvols SELECT REF(v) FROM Vol6 v WHERE pilote# = 2. LIENS D’ASSOCIATIONS 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.8.pl#=1 Note : le Pilote Nr.

Page 117 Copyright G.av_liste_vols FROM avion6 a WHERE a.av# = 1) SELECT REF(v) FROM Vol6 v WHERE v. LIENS D’ASSOCIATIONS I Insertion à travers les liens • Insertion dans la Nested Table AV_LISTES_VOL INSERT INTO TABLE(SELECT a.8. Mopolo-Moké Oracle et le modèle Objet Relationnel .avion# = 1.

320. REF vol6_t. LIENS D’ASSOCIATIONS 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. set_vol6_t. Page 118 Copyright G. null.8. REF vol6_t. Mopolo-Moké Oracle et le modèle Objet Relationnel . set_vol6_t())) RETURNING REF(av) INTO refavion.’A320’. ’Nice’. REF pilote6_t:=NULL. REF avion6_t:=NULL. set_vol6_t.

’Jean DUPOND’. ’rue du nil’. ’Marseille’). adresse_t(15. Mopolo-Moké Oracle et le modèle Objet Relationnel . refpilote.8.3. refavion) RETURNING ref(v) INTO refVol2. Page 119 Copyright G.3. ’Nice’. refpilote. refavion) RETURNING ref(v) INTO refVol1. set_vol6_t()) ) RETURNING REF(pil) INTO refpilote.13000.4. ’12-JUN-45’. ’Lille’. LIENS D’ASSOCIATIONS I Insertion à travers les liens • Insertion à partir d' programme PL/SQL un INSERT INTO PILOTE6 pil VALUES ( pilote6_t( 3. INSERT INTO VOL6 v VALUES(650. INSERT INTO VOL6 v VALUES(550. ’0491825084’.4.50. ’Nice’. ’Lille’. 12001.

av_liste_vols FROM avion6 a WHERE a. INSERT INTO TABLE(SELECT a.insertion en s’appuyant sur la clé étrangère INSERT INTO TABLE(SELECT a.8.avion# = 4. / Page 120 Copyright G. -. END.insertion connaissant un pilote à travers le lien INSERT INTO TABLE(SELECT p.refPilote.av# = 4) SELECT REF(v) FROM Vol6 v WHERE v. Mopolo-Moké Oracle et le modèle Objet Relationnel .Pil_liste_vols FROM pilote6 p WHERE p. -. LIENS D’ASSOCIATIONS I Insertion à travers les liens • Insertion à partir d' programme PL/SQL un -.av_liste_vols FROM avion6 a WHERE a.av# = 4) values(refvol2).av# = 4) values(refvol1).av_liste_vols FROM avion6 a WHERE a.pl# = 3) lvols SELECT REF(v) FROM Vol6 v WHERE v.insertion connaissant les références à insérer INSERT INTO TABLE(SELECT a.pl# = 3.

8. Lors de la suppression de Oe1 par exemple. pour une plus grande efficacité. être prise en compte à travers des méthodes Page 121 Copyright G. tous les Oe2i associés seront supprimés • NOTE : la gestion des liens doit. LIENS D’ASSOCIATIONS I Suppression à travers les liens • Soient deux entités E1 et E2 associées à travers un lien 1:N ou. Mopolo-Moké Oracle et le modèle Objet Relationnel . à une occurrence Oe1 de E1 est associée N occurrences Oe2i de E2 (i : 0 à N) • La suppression à travers un lien consiste à assurer l' intégrité de données.

Page 122 Copyright G.8.pil_liste_vols FROM pilote6 p6 WHERE p6. numavion. pilote# . DELETE FROM TABLE( SELECT p6. LIENS D’ASSOCIATIONS I Suppression à travers les liens • Supprimer la référence au VOL 650 dans liste des vols d’un pilote donné connaissant son numéro DECLARE refvol1 numpil numavion BEGIN DELETE FROM VOL6 V6 WHERE vol# = 650 RETURNING REF(v6). avion# INTO refvol1.pl#=numpil ) listvols WHERE listvols. Mopolo-Moké Oracle et le modèle Objet Relationnel . NUMBER(4).column_value = refvol1. NUMBER(4). numpil. END. / NOTE : On aura pu supprimer directement cet élément REF VOL6_T.

pil_liste_vols INTO listVols FROM pilote6 p6 WHERE p6.8. listVols. Mopolo-Moké Oracle et le modèle Objet Relationnel .COUNT LOOP DELETE FROM VOL6 v WHERE REF(v) = listVols(i). END LOOP. FOR i IN 1. Page 123 Copyright G.pl#=2.. END. LIENS D’ASSOCIATIONS I Suppression à travers les liens • Exemple :Suppression du Pilote numéro 2 et ses vols. / SET_VOL6_T. INTEGER. Declare listVols i BEGIN SELECT p6. DELETE FROM pilote6 WHERE pl# = 2.

8.column_value IS DANGLING . Mopolo-Moké Oracle et le modèle Objet Relationnel . LIENS D’ASSOCIATIONS I Suppression dans une Nested Table contenant des REFERENCEs • L’opérateur IS [NOT] DANGLING permet d' identifier les références qui ne pointent plus vers un objet.pil_liste_vols FROM pilote6 p6 WHERE p6. 2 DELETE FROM TABLE(SELECT p6.pl#=2) listvols WHERE listvols. Page 124 Copyright G. • Exemple – suppression de toutes les références au VOLs supprimés du PILOTE Nr.

refavion. v6. ’Nice’. DEREF(V6. AV_CAP.av_type FROM vol6 v6 WHERE v6.vol#. le nom du pilote et le type d' avion du Vol 550 SELECT v6. NULL. Mopolo-Moké Oracle et le modèle Objet Relationnel . AV_TYPE.refAvion) FROM VOL6 v6 WHERE vol#=550. AV_LISTE_VOLS(REF_VOL6)) AVION6_T(4.8.refpilote.AVION)(AV#.AV_TYPE A320 • Informations sur l’avion participant au VOL 550 SELECT DEREF(v6.vol#=550. AV_LOC. AV_REM. v6. ’A320’. 320. REF_VOL6_T(0000220208692CD9E2B36411D2A65000A024 5FEFFD692CD9C3B36411D2A65000A0245FEFFD))) Page 125 Copyright G. SET_VOL6_T(REF_VOL6_T(0000220208692CD9E1B36411 D2A65000A0245FEFFD692CD9C3B36411D2A65000A0245F EFFD). LIENS D’ASSOCIATIONS I Consultation à travers les liens • Donner le numéro du vol. VOL# 550 PILOTE.NOM Jean DUPOND AVION.nom.

vol# FROM pilote6 p6 WHERE p6. SELECT v.pil_liste_vols FROM pilote6 p6 WHERE p6. v.column_value.column_value. Mopolo-Moké Oracle et le modèle Objet Relationnel .pil_liste_vols(1).PILOTE# 3 3 SELECT p6.8.pl#= 3 AND p6.vol#.nom=’Jean DUPOND’) v.pl#= 3 and p6. LIENS D’ASSOCIATIONS I Consultation à travers les liens • Donner la liste des vols d’un Pilote connaissant son numéro et son nom.nom=’Jean DUPOND’. * ERROR at line 1: ORA-00923: FROM keyword not found where expected Page 126 Copyright G.VOL# 550 650 REF_VOL6. REF_VOL6.pilote# FROM TABLE(SELECT p6.

Page 127 Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel . LIENS D’ASSOCIATIONS I Consultation à travers les liens • Quelsques opérateurs sur les Nested Table – L’opérateur CURSOR permet de spécifier un ensemble d' objets issus d' Nested Table une – L’opérteur TABLE permet d' indiquer qu' une colonne de type Nested Table est une Table.8. Joue aussi le role de l' ancien THE aujourd' hui – CAST( MULTISET ( <requête> ) AS nested_type ) permet de transformer une "requête" en une « nested table ».

PILOTE# Milou TINTIN 450 2 NOM REF_VOL6.nom.PILOTE# Jean DUPOND 300 1 Jean DUPOND 350 1 CURSOR STATEMENT : 1 CURSOR STATEMENT : 1 NOM REF_VOL6.column_value.8.column_value.vol#.NOM.pil_liste_vols) v) FROM pilote6 p6. LIENS D’ASSOCIATIONS I Consultation à travers les liens • Donner la liste des vols de chaque Pilote.VOL# REF_VOL6.PILOTE# Jean DUPOND 550 3 Jean DUPOND 650 3 Page 128 Copyright G. En utilisant les opérateurs CURSOR et TABLE SELECT CURSOR( SELECT p6.VOL# REF_VOL6. CURSOR STATEMENT : 1 CURSOR STATEMENT : 1 NOM REF_VOL6.VOL# REF_VOL6. Mopolo-Moké Oracle et le modèle Objet Relationnel .pilote# FROM TABLE (p6. CURSOR(SELECTP6. v. v.

REF_VOL6_T(0000280209692CD9CFB36411D2A65000A0245EFFD692 CD9C3B36411D2A65000A0245FEFFD014002B00001).2))ASSET_VOL6_T)(REF_VOL6) SET_VOL6_T(REF_VOL6_T(0000280209692CD9CEB36411D2A65000 A0245FEFFD692CD9C3B36411D2A65000A0245FEFFD014002B000 00).2) ) AS SET_VOL6_T ) FROM dual. LIENS D’ASSOCIATIONS I Consultation à travers les liens • Donner la liste des références de vols d' Pilote un connaissant son numéro. CAST(MULTISET(SELECTREF(V)FROMVOL6VWHEREV. En utilisant les opérateurs CAST et Multiset SELECT CAST ( MULTISET( SELECT REF(v) FROM vol6 v WHERE v.pilote# IN (1.8. REF_VOL6_T(0000280209692CD9D0B36411D2A65000A0245FEFFD69 2CD9C3B36411D2A65000A0245FEFFD014002B00002)) Page 129 Copyright G.PILOTE #IN(1. Mopolo-Moké Oracle et le modèle Objet Relationnel .

’NICE’).pilote#=4 )AS set_vol6_t ) ) FROM dual. CAST (MULTISET( SELECT REF(v) FROM VOL6 v WHERE v.8. adresse_t(1.6000. LIENS D’ASSOCIATIONS I Consultation à travers les liens • CAST et MULTSET peuvent être utilsés en insertion INSERT INTO PILOTE6 SELECT pilote6_t( 4. ’0493825084’. ’12-JUN-47’. Page 130 Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel . ’GAGARIN’. ’rue Arago’.50. 12000.

Mopolo-Moké Oracle et le modèle Objet Relationnel . LIENS D’ASSOCIATIONS I Autres Considérations • la gestion des liens d’associations via les références en s' appuyant sur REF et les Nested Tables "devrait" favoriser les performances dans un contexte navigationnel • il s’agit d’une sorte d’implémentation de la jointure si on connecte deux tables par l' égalité • la programmation d’applications objets est mieux adaptée dans un langage L3G plutôt que SQL seul Page 131 Copyright G.8.

9. Mopolo-Moké Oracle et le modèle Objet Relationnel . Lien d’héritage I PLAN • Généralités • Les sous-types • Surcharge des méthodes et des attributs • Types non instanciables • Les types et les méthodes finales • Conversion de types • Les nouveaux opérateurs liés à l’héritage Page 132 Copyright G.

On dit aussi que A est un fils de B ou que B est père de A. l’héritage simple Page 133 Copyright G. Lien d’héritage I Généralités • Soit deux types A et B. on dit que A hérite de B. • L’Héritage est le mécanisme de transmission des propriétés d’un type vers les types dérivés. Mopolo-Moké Oracle et le modèle Objet Relationnel . ssi l' ensemble des caractéristiques statiques et dynamiques de B sont aussi implicitement celles de A. • Oracle supporte depuis la version 9.9.

9. Lien d’héritage 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 père inheritanceClauses Propriétés d’ héritage au niveau des fonctions et des procédures 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 modèle Objet Relationnel .

MEMBER PROCEDURE afficher ) NOT FINAL. Lien d’héritage I Les sous-types • Exemple de création d’un sous-type CREATE OR REPLACE TYPE Personne_t AS OBJECT( numInsee varchar2(30).9. le type est FINAL. / – NOTE : • Si l’ option NOT FINAL n’ est pas précisé. / CREATE OR REPLACE TYPE Employee_t UNDER Personne_t ( salaire number(7. On ne peut pas créer des sous-types à partir de lui Page 135 Copyright G. nom varchar2(20). DateNaiss date. Mopolo-Moké Oracle et le modèle Objet Relationnel . Prenom varchar2(20).2) ).

/ Page 136 Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel . Lien d’héritage I Surcharge des méthodes • La surcharge permet de définir plusieurs méthodes ayant un même nom mais offrant des comportements différents • Exemple CREATE OR REPLACE TYPE Position as OBJECT( x number(5. y number(5.2). MEMBER PROCEDURE setSalaire(sal IN number). / CREATE OR REPLACE TYPE Employee_t UNDER Personne_t ( salaire number(7.2).2) ). MEMBER PROCEDURE setSalaire(sal IN varchar2).9. MEMBER PROCEDURE afficher(coord position) ).

/ • • Limites de la redéfinition – On ne peut redéfinir une méthode finale – Les méthodes MAP et ORDER ne peuvent être redéfini – Une méthode statique d’un sous-type ne peut redéfinir une méthode du type père – Une méthode membre d’un sous-type ne peut redéfinir une méthode statique du type père – Le prototype de la méthode dans le sous-type doit être équivalent à celui de la méthode au niveau du type père Page 137 Copyright G. Lien d’héritage I Redéfinition des méthodes • Le mot clé [NOT ] OVERRIDING permet de contrôler la redéfinition d’une méthode d’un type au niveau d’un de ses sous-types Exemple CREATE OR REPLACE TYPE Employee2_t UNDER Personne_t ( salaire number(7.9.2). OVERRIDING MEMBER PROCEDURE afficher ). Mopolo-Moké Oracle et le modèle Objet Relationnel .

y number(4). il doit être NOT INSTANTIABLE et NOT FINAL • Exemple de définition d’un type et d’une méthode non instanciable CREATE OR REPLACE TYPE FIGURE_T AS OBJECT( x number(4). Page 138 Copyright G. NOT INSTANTIABLE MEMBER FUNCTION surface RETURN NUMBER. Une méthode de ce genre n’a pas de corps elle doit être redéfinie dans les types fils • Si un type a une méthode NOT INSTANTIABLE. MEMBER PROCEDURE deplacer(x1 IN NUMBER. Mopolo-Moké Oracle et le modèle Objet Relationnel . y1 IN NUMBER) ) NOT INSTANTIABLE NOT FINAL.9. Lien d’héritage I Types non instanciables • Le mot clé [NOT] INSTANTIABLE permet de définir l’équivalent d’une méthode abstraite ou d’une classe Abstraite en Java.

9. / Page 139 Copyright G. OVERRIDING MEMBER FUNCTION surface RETURN NUMBER ). END. Lien d’héritage I Types non instanciables • Exemple de définition d’un type et d’une méthode à partir d’un type non instanciable CREATE OR REPLACE TYPE CERCLE_T UNDER FIGURE_T ( rayon NUMBER(4). CREATE OR REPLACE TYPE BODY CERCLE_T IS OVERRIDING MEMBER FUNCTION surface RETURN NUMBER IS BEGIN RETURN rayon*rayon. END. Mopolo-Moké Oracle et le modèle Objet Relationnel .

Mopolo-Moké Oracle et le modèle Objet Relationnel . • Exemple CREATE TABLE o_personne of personne_t. ’Fei Fei’. ’10/10/90’.9. Select * from o_personne. ’Dong’. une instance d’un sous-type peut apparaître partout ou une instance d’un type père apparaît. Page 140 Copyright G. ’Dong’. INSERT INTO o_personne VALUES(employee_t(’222222’.0)). INSERT INTO o_personne VALUES(personne_t(’122222’. ’10/10/82’)).10000. ’Jing Tong’. Lien d’héritage I Conversion de types • A l’image des systèmes à objets.

0).10000. ' Tong'' Jing . – Il est possible de limiter la substitution sur certains TYPE CREATE TABLE o_personne3 OF personne_t IS OF ( EMPLOYEE_T ).. end.9. • Autre cas : Un employé est forcement une personne – Exemple declare pers1 Personne_t := personne_t(' 122222' . Mopolo-Moké Oracle et le modèle Objet Relationnel . Fei . ' Dong’ . 10/10/90' . ' Dong'' Fei'' . begin pers1 := emp1. Page 141 Copyright G. 10/10/82' ). emp1 Employee_t:= employee_t(' 222222' . Lien d’héritage I Conversion de types • Limitation des conversions implicites – Lors de la création il est possible d’interdire toute substitution CREATE TABLE o_personne2 OF personne_t NOT SUBSTITUTABLE AT ALL LEVELS.

10000) Page 142 Copyright G. ’10/10/90’. VALUE(OP)(NUMINSEE.9. Mopolo-Moké Oracle et le modèle Objet Relationnel . SYS_TYPEID. DATENAISS) -----------------------------------------------------------EMPLOYEE_T(’222222’. PRENOM. ’Fei Fei’. ’Dong’. Lien d’héritage I Les nouveaux opérateurs liés à l’ héritage • Certains nouveaux opérateurs ou fonctions sont introduits avec l’héritage : IS OF type. TREAT • IS OF type permet de déterminer si un objet est d’un type donné Select value(op) FROM o_personne op Where value(op) is of (employee_t). NOM.

Il est par exemple possible de convertir les instances d’un type de base en des instances de ses sous-type SELECT TREAT(value(op) as employee_t) FROM o_personne op. ’Dong’. SALAIRE) EMPLOYEE_T(’222222’. 10000) Page 143 Copyright G. TREAT(VALUE(OP)ASEMPLOYEE_T)(NUMINSEE. Mopolo-Moké Oracle et le modèle Objet Relationnel .nom. NOM. Lien d’héritage I Les nouveaux opérateurs liés à l’ héritage • SYS_TYPEID : permet de renvoyer l’identifiant du type exacte d’une instance SELECT op. DATENAISS. PRENOM. ’10/10/90’. SYS_TYPEID(VALUE(op)) TYPE_ID FROM o_personne op NOM TYPE_ID Dong 01 Dong 02 • TREAT permet de convertir le type d’une expression en un type donné. ’Fei Fei’.9.

LES VUES I PLAN • Généralités • Les Types de vues • Création et manipulation de vues normales • Création et manipulation de vues objets • L’opérateur MAKE_REF • Le TRIGGER INSTEAD OFF Page 144 Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel .10.

O). . .10. – d ’augmenter la sécurité des tables de base – de masquer des informations à certains utilisateurs • Les avantages des vues sont les suivants : .Coexistence entre applications relationnelles et applications O. Mopolo-Moké Oracle et le modèle Objet Relationnel . .O . LES VUES I Généralités • Les vues sont des objets définis à partir des tables existantes et/ou des ADTs.Accès aux données relationnelles par les applications Orientées Objets (O. Elles permettent : – de masquer la complexité d ’une requête.Plusieurs applications peuvent être basées sur la même table. Page 145 Copyright G.Intégration des tables de la V7 dans la V8 ou plus. chaque application utilisant une vue de la table répondant à ses besoins.

Mopolo-Moké Oracle et le modèle Objet Relationnel . Les colonnes d' telle vue sont définies sur une un type de l' utilisateur Page 146 Copyright G. objet ou sur d’autres vues – vue objet : une vue objet est une "table objet virtuelle" dont les instances sont identifiées par des OID. relationnelles) : – vue relationnelle : une vue relationnelle est une vue construite sur les colonnes d’une table relationnelle. LES VUES I Les types de vues • On distingue 2 types de vues. relationnelles) ou autres vues (objets.10. définies sur les tables (objets.

10... Page 147 Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel . LES VUES I Les types de vues • réprésentation schématique VUE OBJET VUE OBJET VUE RELATIONNELLE VUE RELATIONNELLE TABLE RELATIONNELLE TABLE RELATIONNELLE TABLE OBJET TABLE OBJET Une VUE XXX peut être construite à partir de .

dnaiss DATE. Mopolo-Moké Oracle et le modèle Objet Relationnel . adresse adresse_t. Page 148 Copyright G. une vue objet.10. Tel VARCHAR2(12). une table relationnelle ou une table objet. elle ne une possède pas d' OID • Exemple de création d' vue relationnelle à partir une d' table relationnelle une CREATE TABLE rpilote7 ( PL# NUMBER(4).2). salaire NUMBER(7. A la différence d' vue Objet. nom VARCHAR2(12). PIL_liste_vols2 Set_Vol6_t) NESTED TABLE pil_liste_vols2 STORE AS store_pil_liste_vols2. LES VUES I Création et manipulation de vues relationnelles • Une vue relationnelle peut être construite sur : une vue relationnelle.

tel) AS SELECT Pl#. plnom.ville =' NICE' . • Exemple de création d' vue relationnelle à partir une d' TABLE OBJET une CREATE OR REPLACE VIEW v_pilote6_nice AS SELECT * FROM pilote6 p6 WHERE p6.adresse. NOTE : pilote6 est une table objet mais pas la vue v_pilote6_nice Page 149 Copyright G. nom. Tel FROM rpilote7 . adresse. adresse.10. LES VUES I Création et manipulation de vues relationnelles • Exemple de création d' vue relationnelle à partir une d' TABLE relationnelle une CREATE OR REPLACE VIEW pilote_v (plnum. Mopolo-Moké Oracle et le modèle Objet Relationnel .

attribut2. WITH OBJECT IDENTIFIER Page 150 Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel . Cette clause est obligatoire s' s' il agit d' vue sur une table objet ou une vue une objet.10. LES VUES I Création et manipulation de vues OBJETS • Syntaxe de création d' vue object une CREATE OR REPLACE [FORCE] VIEW nomVue OF nomTypeObjet WITH OBJECT IDENTIFIER [DEFAULT | (attribut1. … )] AS sousRequête Mots et paramètres OF nomTypeObjet Description création d' vue objet sur le type une nomTypeObjet permet de spécifier la ou les colonnes utilisées comme clé pour identifier de façon unique les lignes de la vue objet.

nom CHAR(20).10. tel CHAR(20). Mopolo-Moké Oracle et le modèle Objet Relationnel . Page 151 Copyright G. adresse adresse_t. dnaiss DATE). LES VUES I Création et manipulation de vues OBJETS • Création 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) .

DATE) / -.création de la vue sur les pilotes CREATE OR REPLACE VIEW o_view_pilote OF r_pilote_t WITH OBJECT IDENTIFIER(pl#) AS SELECT rp. CHAR(20). Page 152 Copyright G. adresse_t. CHAR(20).* FROM rPilote8 rp. Mopolo-Moké Oracle et le modèle Objet Relationnel . LES VUES I Création et manipulation de vues OBJETS • Création d' vue objet à partir d' table une une relationnelle – Exemple (suite) -.création du type r_pilote_t CREATE TYPE r_pilote_t as object( pl# nom tel adresse dnaiss NUMBER(4) .10.

Mopolo-Moké Oracle et le modèle Objet Relationnel . LES VUES I Création et manipulation de vues OBJETS • Création d' vue objet à partir d' table une une OBJET – Exemple -.adresse. op. op.pl#. op.création 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.10.dnaiss FROM pilote6 op.nom.tel. op. NOTE : PILOTE6 est une table Objet Page 153 Copyright G.

LES VUES I Création et manipulation de vues OBJETS • Remarque sur les vues objets – l' permet de référencer les lignes accessibles à OID travers la vue – un index unique doit être associé aux colonnes jouant le rôle 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 modèle Objet Relationnel .10.

’0493825084’. SELECT op. Mopolo-Moké Oracle et le modèle Objet Relationnel .adr. PLNUM 2 NOM Milou TINTIN VILLE Bruxelles SELECT REF(vp) FROM o_view_pilote vp. op. REF(VP) 000050030A004CEB0BF16DB42911D2A65100A0245FE FFD0000001426010001000100290000000000090604002A 0007000000200200000000000000001602C1030000000000 0000000000000000000000000000 Page 155 Copyright G. ’rue de la Gare’.6000. op.plnum. ’Milou TINTIN’. adresse_t(1. ’12-JUN-47’).ville FROM o_view_pilote op.nom. LES VUES I Création et manipulation de vues OBJETS • Consultation à travers une vue objet INSERT INTO RPILOTE8 VALUES ( 2. ’Bruxelles’).10.

Dans le cas une contraire rend la prochaine référence libre.10. 2) FROM dual. Il est nécessaire de passer à MAKE_REF le nom de la vue et les valeurs des colonnes clés. LES VUES I L’opérateur MAKE_REF • L’opérateur MAKE_REF rend une référence vers une ligne d' vue objet si la ligne existe. • Syntaxe MAKE_REF (nomVueObjet. key[key.2) 000050030A004CEB0BF16DB42911D2A65100A024 5FEFFD0000001426010001000100290000000000090 604002A0007000000200200000000000000001602C1 0300000000000000000000000000000000000000 Page 156 Copyright G. … ]) • Exemple 1 SELECT MAKE_REF(o_view_pilote . MAKE_REF(o_view_pilote . Mopolo-Moké Oracle et le modèle Objet Relationnel .

une nouvelle référence est attribuée.3) 000050030A004CEB0BF16DB42911D2A65100A024 5FEFFD0000001426010001000100290000000000090 604002A0007000000200200000000000000001602C1 0400000000000000000000000000000000000000 • Si l' objet identifié par la clé existe c' la référence est existante qui est renvoyée sinon. 3) FROM dual. Page 157 Copyright G. LES VUES I L’opérateur MAKE_REF • Exemple 2 SELECT MAKE_REF(o_view_pilote . Mopolo-Moké Oracle et le modèle Objet Relationnel .10. MAKE_REF(o_view_pilote .

/ Page 158 Copyright G. adresse_t.adresse. END.adresse.10. Ce qui n’était pas possible jusqu' la version 7 d' à Oracle • Le trigger INSTEAD OF est toujours exécuté à la place de l' ordre SQL sous-jascent(INSERT.ville = :new. 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. UPDATE.ville. LES VUES I Le trigger INSTEAD OF • Le trigger INSTEAD OF permet de mettre à jour les tables sous-jascentes à une vue Complexe. Mopolo-Moké Oracle et le modèle Objet Relationnel .

SUPPORT DES OBJETS VOLUMINEUX I PLAN • Généralités • Les LOBs internes • Les LOBs externes ou BFILE • Les LOBs Locators • Le Package DBMS_LOB • Informations sur les LOBs • Quelques considérations sur les LOBs • Contraintes sur les LOBs Page 159 Copyright G.11. Mopolo-Moké Oracle et le modèle Objet Relationnel .

0.11. Les LOBs sont adaptés pour les applications multimédia On distingue deux classes de LOBs : les LOBs internes (CLOB pour Caractère LOB. NCLOB pour National Caractère 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 I I I I Page 160 Copyright G. 1 Généralités I Les LOBs : Large Objects ont été introduits par Oracle depuis la version 8. Mopolo-Moké Oracle et le modèle Objet Relationnel .

Mopolo-Moké Oracle et le modèle Objet Relationnel .11. Par contre. 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 données (cellesci étant stockées dans un segment séparé). les LONGs stockent directement les données dans la table . – Un LOB peut atteindre 4GO de taille alors qu' un LONG/LONG RAW est limité à 2GO Page 161 Copyright G. 1 Généralités I Différénces entre LOB et LONG/LONG RAW • Les types LONG RAW ET LONG existent toujours mais les LOB offrent plus de fonctionalités • Les LOBs offrent les avantages suivants : – Plusieurs colonnes de types LOBs dans une table sont possibles.

11. 1 Généralités I Un LOB (objet gros) se décompose en 3 parties • Data : Les données. emplacement qui indique l' endroit ou sont • Locator :L' stockées les données. • 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 modèle Objet Relationnel .

Ils sont directement stockés dans la base AU CAS DANS UN SEGMENT SEPARE Un lob peut être défini comme étant : un attribut d’un ADT. CLOB ou NCLOB. Mopolo-Moké Oracle et le modèle Objet Relationnel . Des blocs de données. une variable PL/SQL. un paramètre ou un résultat d’une fonction Sa structure comprend :Une entête.11. 2 Les LOB internes I Ce sont des LOB de type BLOB. une colonne d’une table. Des blocs Bitmap. Un bloc Bitmap Index (chainage). une variable hôte d' un programme. I I Page 163 Copyright G. une variable SQL.

NUMBER(7. CLOB. BLOB CHUNK 4). CREATE TABLE LPILOTE OF LPILOTE_T( CONSTRAINT pk_lpilote PRIMARY KEY(pl#)) LOB (cv_texte.11. cv_anime) STORE AS (TABLESPACE tools STORAGE (NEXT 10K) DISABLE STORAGE IN ROW NUMBER(4). VARCHAR2(20). Mopolo-Moké Oracle et le modèle Objet Relationnel . DATE. VARCHAR2(20). 2 Les LOB internes I Exemple de création de LOB CREATE OR REPLACE TYPE LPILOTE_T AS OBJECT( pl# nom dnaiss adr salaire cv_texte cv_anime ). Page 164 Copyright G.2).

Par défaut il résident dans le même tablespace que la table • Si un tablespace S est associé à un LOB mais pas à son index.11. Mopolo-Moké Oracle et le modèle Objet Relationnel . 2 Les LOB internes I Gestion du stockage des LOBs internes • Les LOBs et leur Index peuvent être stockés dans des segments séparés de celui de la table qui les contient • Un Tablespace séparé peut être affecté au LOB et / ou à son Index. ce dernier résidera dans S • Plusieurs LOBs d' même table peuvent être une attachés à un même tablespace Page 165 Copyright G.

ENABLE/ DISABLE STORAGE IN ROW permettent de contrôler le stockage des LOBs • PCTVERSION : vaut 10% par défaut. 2 Les LOB internes I Contrôle du stockage des LOBs internes • Les paramètres PCTVERSION. Mopolo-Moké Oracle et le modèle Objet Relationnel . CHUNK. NOCACHE. espace réservé pour conserver les versions précédentes des LOBs afin d' assurer la lecture CONSISTANTE. LOGGING. Le positionner à 20% en cas de MAJ fréquentes – SET PCTVERSION =20 • CACHE/NO CACHE : CACHE permet conserver un LOB souvent accédé en mémoire centrale • LOGGING/NOLOGGING génère ou non la trace dans le fichier REDO LOG Page 166 Copyright G.11. NOLOGGING. CACHE.

CHUNCK ne peuvent être spécifiés qu' la création d' Table à une Page 167 Copyright G. lorsque les données d' LOB sont < à 4Ko. 2 Les LOB internes I Contrôle du stockage des LOBs internes • CHUNK : nombre de blocks lus ou écrits d' coup un lors de l' appel des méthodes OCIlobWrite. OCIlobRead.read – Note : Intitial et Next doivent être supérieurs à CHUNK • ENABLE (DISABLE) STORAGE IN ROW : autorise. ENABLE (DISABLE)STORAGE IN ROW. DBMS_LOB. Mopolo-Moké Oracle et le modèle Objet Relationnel .write ou DBMS_LOB.11. à un écrire directement dans la ligne qui contient le LOB pour des raisons de PERFORMANCE • NOTE : les paramètres TABLESPACE.

Page 168 Copyright G.11. Mopolo-Moké Oracle et le modèle Objet Relationnel . 2 Les LOB internes I Contrôle du stockage des LOBs internes • Exemple ALTER TABLE LPILOTE MODIFY LOB (cv_texte) ( CACHE PCTVERSION 20 STORAGE (NEXT 10K) INDEX (STORAGE (next 12K )) ).

Mopolo-Moké Oracle et le modèle 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’ opérateur EMPTY_CLOB ou EMPTY_BLOB • un LOB initialisé à NULL ne pourra être manipulé que s' a été mis à vide il Page 169 Copyright G.

Le . • UPDATE lpilote SET cv_anime = EMPTY_BLOB() WHERE pl#=12. Page 170 Copyright G. 12-DEC-70' .0.11. • Il est possible de vérifier qu' LOB est positionné à un NULL. ' Guela'' . ' Cap'2000. EMPTY_CLOB(). NULL). Mopolo-Moké Oracle et le modèle Objet Relationnel . 2 Les LOB internes I Initialisation des LOBs internes • Exemple INSERT INTO LPILOTE VALUES (12.

3 Les LOB externes I Le type BFILE (File Based LOB) spécifie que le LOB sera stocké en dehors de la base de données Oracle.11. Le système de fichiers d’Oracle garde en mémoire le chemin d’accès de ce fichier. Les BFILE sont vus comme étant des données binaires I I Page 171 Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel .

• Il permet également de gérer toutes les utilisations des FILEs stockés sur le serveur Oracle. • Les privilèges autorisés pour l’ objet « DIRECTORY » sont : READ. Mopolo-Moké Oracle et le modèle Objet Relationnel . DELETE et CREATE DIRECTORY • Syntaxe CREATE OR REPLACE DIRECTORY nomDirectory AS ' PathAvecNomFichier' . NOTE : NomDirectory => nom du répertoire dans la base Page 172 Copyright G. 3 Les LOB externes I L’ objet DIRECTORY • Un nouvel objet appelé « DIRECTORY ». permet l’administration des accès et la manipulation de fichiers.11. WRITE.

Créer la table oracle contenant le type BFILE. • 3. Copier les fichiers à l’ intérieur de ce répertoire. Insérer les rows de la table en associant le fichier OS. Créer le répertoire sous l’ OS (en tant qu’ utilisateur oracle) et lui donner les accès. • 2. 3 Les LOB externes I Voici les étapes pour installer des objets de type FILE et des objets « DIRECTORY » : • 1. • 5. Mopolo-Moké Oracle et le modèle Objet Relationnel . Page 173 Copyright G. Créer l’ objet DIRECTORY et lui donner les droits. • 4.11.

Copier le fichier dans ce répertoire : – exemple ORACLEGAL3. 3 Les LOB externes I Exemple : • 1. Créer la table contenant le BFILE CREATE TABLE PROJET( PROJ# ProjNom ProjFile à suivre NUMBER(4).DOC • 3. Création du répertoire sous L' OS mkdir ’C:\ORA8DATA\DBCOUR\LOB\FILES\’. BFILE). Mopolo-Moké Oracle et le modèle Objet Relationnel . Page 174 Copyright G. • 2. VARCHAR2(20).11.

Créer un objet DIRECTORY CREATE OR REPLACE DIRECTORY bfile_dir AS ' C:\ORA8DATA\DBCOUR\LOB\FILES\' . nomFichier' ).DOC' )). INSERT INTO projet VALUES(102. Initialiser un BFILE grâce à la méthode BFILENAME(' nomDirectory'' . ' ORACLEGAL3. Mopolo-Moké Oracle et le modèle Objet Relationnel . • 5. BFILENAME(' BFILE_DIR' . ' Objectif lune ' . • NOTE : – Pas de vérification de la présence du fichier en insertion Page 175 Copyright G.11. 3 Les LOB externes I Exemple : • 4.

Mopolo-Moké Oracle et le modèle Objet Relationnel . de controles our Redo Log) : RISQUE d' ACCIDENTS • Contrôler l' affectation du privilège CREATE ANY DIRECTORY • Ne pas utiliser les commandes DROP ou REPLACE sur les objets qui pointent vers un BFILE en cours de manipulation. 3 Les LOB externes I Règles d' utilisation des directory • Une directory ne doit pas pointer sur les Répertoires des Fichiers Oracle(fichiers de données.11. Risque de perte de pointeurs • Le retrait des privilèges à un utilisateur sur une Directory provoque l' échec de ses actions sur un BFILE Page 176 Copyright G.

11. 4 Les LOBs Locators I On distingue deux types de Lobs Locators : • les LOBs Locators internes • les LOBs Locators externes I Un Lob Locator est un pointeur contenu dans un enregistrement vers les données (DATA) d' un LOB externe ou interne. • S’il s’agit d’un BFILE le Locator est un nom de fichier • S’il s’agit d’un CLOB. BLOB ou NCLOB c’est la position de la valeur du LOB dans son segment de données Page 177 Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel .

• Récupération 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 modèle Objet Relationnel . filename) RETURN BFILE. BFILENAME(directory_alias. 4 Les LOBs Locators I Opérations sur les LOBs Locators • Initialisation des colonnes devant contenir des LOCATORS. Via INSERT et UPDATE en utilisant les Builtins : EMPTY_CLOB() RETURN CLOB.11. EMPTY_BLOB() RETURN BLOB.

• Ces outils utilisent les valeurs de deux constantes : – DBMS_LOB.. BLOB et NCLOB sont contenues dans la boite à outils ‘DBMS_LOB’.11. • Les fonctions et procédures de ce package peuvent être classées en deux groupes : – Mutators : Write. erase..5 Le Package DBMS_LOB I LOB PL/SQL Package (DBMS_LOB) • La plupart des opérations utilisées sur les objets BFILEs. read.MAX_BLOB_SIZE = 4 Go. fdelete. copy. – Observers : Compare. (interviennent sur la mise à jour de fichiers externes). Mopolo-Moké Oracle et le modèle Objet Relationnel .. . CLOB... (interviennent en consultation). exist.. – DBMS_LOB.MAX_CLOB_SIZE = 4 Go. Page 179 Copyright G.

5 Le Package DBMS_LOB I Classification des méthodes Méthodes de MAJ des BLOB.11. Mopolo-Moké Oracle et le modèle Objet Relationnel . CLOB et NCLOB Append() Ajoute le contenu du source vers Destination copie un LOB source vers un autre Efface toute les parties d’un LOB Charge les données d' Fichier vers un un BLOB interne Réduit la valeur d' LOB à la taille un spécifiée Ecriture des données dans un LOB à partir d' OFFSET un Copy() ERASE() LOADFROMFILE() TRIM() WRITE Page 180 Copyright G.

5 Le Package DBMS_LOB I Classification des méthodes Méthodes de Lecture et de contrôle des LOB internes et Externes compare compare deux LOBs ou deux parties de LOBs rend la longueur d’un LOB rend la position de la Nième occurrence d' modèle dans le LOB un lecture des données 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 modèle Objet Relationnel .11.

11.5 Le Package DBMS_LOB I Classification des méthodes Méthodes spécifiques aux BFILE fileClose() fileClose() fileExist() rend la longueur d’un 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 modèle Objet Relationnel .

11. Mopolo-Moké Oracle et le modèle Objet Relationnel .5 Le Package DBMS_LOB I Classification des méthodes • Les types de données en entrée ou en sortie des méthodes 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 caractères (utile pour manipuler les CLOB et NCLOB) – INTEGER : spécifie la taille du buffer ou du LOB. l' offset du LOB Page 183 Copyright G.

amount IN OUT BINARY_INTEGER. buffer OUT VARCHAR2 CHARACTER SET LOB_LOC%CHARSET) 3. amount IN OUT BINARY_INTEGER. offset IN TEGER. procedure READ(lob_loc IN BLOB. buffer OUT RAW) 2. offset IN TEGER. BFILE 1. amount IN OUT BINARY_INTEGER. offset IN TEGER. procedure READ(lob_loc IN CLOB CHARACTER SET ANY_CS. Mopolo-Moké Oracle et le modèle Objet Relationnel . procedure READ(lob_loc IN BFILE. buffer OUT RAW) Page 184 Copyright G. CLOB/NCLOB.11.5 Le Package DBMS_LOB I La méthode READ • Cette méthode permet de lire des données dans les LOB internes ou externes • Trois prototypes sont disponibles selon le type de LOB : BLOB.

Mopolo-Moké Oracle et le modèle Objet Relationnel Page 185 .5 Le Package DBMS_LOB I La méthode READ • les paramètres nom lob_loc amount offset buffer description Locator du LOB à lire Quantité des données à lire Position à partir du début du CLOB ou BLOB Buffer dans lequel est stocké le résultat • les exceptions pouvant survenir – – – – VALUE_ERROR INVALID_ARGVAL NO_DATA_FOUND Pour les BFILEs seuls : UNOPENED_FILE. NOPRIV_DIRECTORY.11. NO_EXIST_DIRECTORY. INVALID_OPERATION Copyright G.

PUT_LINE(' More Data' No ). qte. position. buffer RAW(32767). qte BINARY_INTEGER := 32767. /* Insérer les Manipulations ICI*/ position := position+qte. END. EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT. / Page 186 Copyright G.11. position INTEGER := 1.5 Le Package DBMS_LOB I La méthode READ • Exemple de lecture d' BLOB un CREATE OR REPLACE PROCEDURE readCvAnime IS lobCvAnime BLOB. LOOP DBMS_LOB. END LOOP. buffer).READ(lobCvAnime. Mopolo-Moké Oracle et le modèle Objet Relationnel . BEGIN SELECT cv_anime INTO lobCvAnime FROM lpilote WHERE pl#=1.

DBMS_LOB. -. END IF.11.PUT_LINE(’Fichier inexistant’). DBMS_LOB. BEGIN SELECT projFile INTO bfProjetFile FROM projet WHERE proj#=102.ouverture du fichier (Lecture seule sinon erreur) IF DBMS_LOB.PUT_LINE(’Fichier Ouvert ! ’). ELSE DBMS_OUTPUT. --position := position+qte.à suivre Page 187 Copyright G.FILE_READONLY).FILEOPEN(bfProjetFile.FILEEXISTS(bfProjetFile)=1 THEN DBMS_OUTPUT. position INTEGER := 1. qte BINARY_INTEGER := 32767. -. buffer RAW(32767). Mopolo-Moké Oracle et le modèle Objet Relationnel .5 Le Package DBMS_LOB I La méthode READ • Exemple de lecture dans un BFILE CREATE OR REPLACE PROCEDURE readProjetFile IS bfProjetFile BFILE.

DBMS_LOB. position.11. buffer). position := position+qte. Mopolo-Moké Oracle et le modèle Objet Relationnel . / Page 188 Copyright G. qte.PUT_LINE(' du LOB' Fin ).FILECLOSE(bfProjetFile).READ(bfProjetFile. EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.5 Le Package DBMS_LOB I La méthode READ • Exemple de lecture d' BFILE un LOOP DBMS_LOB. END. /* Insérer les Manipulations ICI*/ END LOOP.

11. buffer IN VARCHAR2 CHARACTER SET LOB_LOC%CHARSET) Page 189 Copyright G. offset IN TEGER. amount IN BINARY_INTEGER. BFILE 1. procedure WRITE(lob_loc IN OUT CLOB CHARACTER SET ANY_CS. amount IN IN BINARY_INTEGER. CLOB/NCLOB.5 Le Package DBMS_LOB I La méthode WRITE • Cette méthode permet d' écrire des données dans un LOB interne à partir d' OFFSET un • Deux prototypes sont disponibles selon le type de LOB : BLOB. procedure WRITE(lob_loc IN OUT BLOB. Mopolo-Moké Oracle et le modèle Objet Relationnel . buffer IN RAW) 2. offset IN TEGER.

11.5 Le Package DBMS_LOB I La méthode WRITE • les paramètres nom lob_loc amount offset buffer description Locator du LOB interne ou écrire Nombre de bytes à écrire ou écrits Position (à partir du début du CLOB ou BLOB) à partir de laquelle on va écrire Buffer contenant les données à écrire • les exceptions pouvant survenir – VALUE_ERROR – INVALID_ARGVAL Page 190 Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel .

qte BINARY_INTEGER := 32767. position. position INTEGER :=2147483647. LOOP -. buffer VARCHAR2(32767). DBMS_LOB.WRITE(lobCvTexte. Mopolo-Moké Oracle et le modèle Objet Relationnel . END.PUT_LINE(' Erreur de Valeurs' ). position := position+qte. qte. BEGIN SELECT cv_texte INTO lobCvTexte FROM lpilote WHERE pl#=12. EXCEPTION WHEN VALUE_ERROR THEN DBMS_OUTPUT. END LOOP.buffer := ' ya un debut a tout' Il . / Page 191 Copyright G.5 Le Package DBMS_LOB I La méthode WRITE • Exemple d' écriture dans un BLOB CREATE OR REPLACE PROCEDURE writeCvTexte IS lobCvtexte CLOB. buffer).préparer des données dans buffer puis écrire -.11.

6 Informations sur les LOBs I Les vues du dictionnaire Oracle • Les vues sur les LOBS : ALL_LOBS. USER_LOBS • Les vues sur les directories : ALL_DIRECTORIES. Mopolo-Moké Oracle et le modèle Objet Relationnel .11. DBA_LOBS. DBA_DIRECTORIES I 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.

11. Mopolo-Moké Oracle et le modèle Objet Relationnel .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 mémoire 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.

6 Informations sur les LOBs I Les vues du dictionnaire Oracle • Lister les informations sur les directories SELECT TABLE_NAME. COLUMN_NAME. INDEX_NAME. 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. IN_ROW FROM dba_lobs WHERE table_name IN (' LPILOTE'' . PROJET' ). SEGMENT_NAME. PCTVERSION. CHUNK. Mopolo-Moké Oracle et le modèle Objet Relationnel . CACHE.11.

Mopolo-Moké Oracle et le modèle Objet Relationnel . DIRECTORY_NAME.6 Informations sur les LOBs I Les vues du dictionnaire Oracle • Lister les informations sur toutes les Directories de votre base. SELECT OWNER.11. 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. DIRECTORY_PATH FROM dba_directories.

I Le nombre maximum de fichiers BFILE ouverts est contrôlé via le paramètre d' initialisation • SESSION_MAX_OPEN_FILES=valeur • Le développeur doit.7 Quelques Considérations sur les LOBs I Lecture Consistante et LOB : • Oracle assure que deux processus peuvent agir sur un même CHUNCK d’ un LOB. Mopolo-Moké Oracle et le modèle Objet Relationnel . L’ un en lecture l’ autre en écriture. s' a ouvert un fichier le il fermer. SINON RISQUE DE DEPASSEMENT du PARAMETRE SESSION_MAX_OPEN_FILES Page 196 Copyright G.11.

Order by. join. I I Page 197 Copyright G.11. Mopolo-Moké Oracle et le modèle Objet Relationnel . select distinct. Utiliser dbms_lob.8 Contraintes sur les LOBs I Pas de LOB distribué Pas de chargements de LOB avec SQLLOADER en V8.loadfromfile() Les LOBs ne peuvent apparaître : dans des requêtes avec Group by.

8 Contraintes sur les LOBs I Pas d’appel des méthodes du package DBMS_LOB dans le code PL/SQL du poste client Les NCLOBs ne sont pas autorisés dans les types objets I Page 198 Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel .11.

12. PL/SQL I PLAN • Généralités • Les types • Les instances • Les collections en PL/SQL • Les call out de PL/SQL Page 199 Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel .

Mopolo-Moké Oracle et le modèle Objet Relationnel . PL/SQL I Généralités • Version disponible du coté du moteur Oracle.12. les outils de développement ne sont pas encore toujours à jour • supporte la programmation Orienté Objet • améliore les performances grâce à la centralisation du code sur le moteur base de données • augmente la portabilité Page 200 Copyright G.

Code_Postal NUMBER(5). Rue VARCHAR2(20).12. Ce type pourra être utilisé dans la déclaration de variables PL/SQL Page 201 Copyright G. • Définition d' type permanent en SQL un SQL>CREATE TYPE pAdresse_t as object( Numéro NUMBER(4). PL/SQL OBJET I Les types • Oracle Objet distingue deux sortes de types : – . Ville VARCHAR2(20)).Les types définis en SQL (types permanents): Les ADT définis à ce niveau peuvent avoir des méthodes – Les types définis en PL/SQL (types temporaires) : leur durée de vie est limitée à l ’exécution du programme. Mopolo-Moké Oracle et le modèle Objet Relationnel .

NCHAR. – Les éléments d' VARRAY ou d' Type table peuvent un un pas être : BOOLEAN. … ). des Types RECORD. Il sera possible de définir des "Types Tables". TYPE nomType REF CURSOR OF typeDesElements . Mopolo-Moké Oracle et le modèle Objet Relationnel . des Types VARRAY et des Types REF CURSOR – Les différentes Syntaxes TYPE nomType IS VARRAY(limit) OF typeDesElements. TYPE nomType IS RECORD (déclarationDesChamps. PL/SQL OBJET I Les types • Définition d' type temporaire en PL/SQL un – Les types temporaires sont définis grâce à la commande TYPE. types objets contenant des types tables ou des VARRAY.12. NVARCHAR2. des REF CURSOR. TYPE nomType IS TABLE OF typeDesElements . des TYPES TABLES ou des VARRAY Page 202 Copyright G.

Mopolo-Moké Oracle et le modèle Objet Relationnel . begin p.numero :=10. Rue VARCHAR2(20). p padresse_t. Code_Postal NUMBER(5). PL/SQL OBJET I Les types • Définition d' type temporaire en PL/SQL un – Exemple declare TYPE numList_t IS TABLE OF NUMBER.12. TYPE jourSeamine_t IS VARRAY(7) OF VARCHAR2(13). / NOTE : adresse_t est est type permanent Page 203 Copyright G. TYPE tabAdresse_t IS VARRAY(2) OF Adresse_t. TYPE pAdresse_t IS RECORD( Numero NUMBER(4). end. Ville VARCHAR2(20)).

-. Page 204 Copyright G. 2) Instantiation temporaire d’un ADT DECLARE addr1 adress_t := adress_t (1. -.’ NICE’ ) .’ NICE’ ) .VRAI … . --avec constructeur addr2 adress_t .’ rue Arago’ .06000.12. -. Mopolo-Moké Oracle et le modèle Objet Relationnel .06000.création de la table object Adresse CREATE TABLE Adresse OF Adress_t .type abstrait défini préalablement INSERT INTO Adresse VALUES (1. PL/SQL OBJET I Les instances 1) Instantiation permanente d’un ADT -. addr2.Rue := ‘5th Avenue’ .’ rue Arago’ .Exception ! END .a pour valeur NULL BEGIN IF addr2 IS NULL -.

SQL>CREATE OR REPLACE TYPE avion9_set_t Page 205 Copyright G.12. VARCHAR2(20). • Exemple de manipulation d' collection définies 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. Mopolo-Moké Oracle et le modèle Objet Relationnel . VARCHAR2(45). NUMBER(4). les tables définies à partir d’ Oracle 8 peuvent contenir des ADTs comme éléments. NUMBER(4)). PL/SQL OBJET I Les collections en PL/SQL • A la différence de PL/SQL V2.

avion9_set_t) NESTED TABLE avions9 STORE AS storeAvions9. Page 206 Copyright G. PL/SQL OBJET I Les collections en PL/SQL • Exemple de manipulation d' collection définie dans une la base ou dans PL/SQL • Création d’ une table avec une colonne de type table CREATE TABLE hangar9 ( hangar# avions9 NUMBER(2). Mopolo-Moké Oracle et le modèle Objet Relationnel .12.

. avion9_set_t(avion9_t(1. Berlin'300). PL/SQL OBJET I Les collections en PL/SQL OBJET • Exemple de manipulation d' collection définie dans une la base ou dans PL/SQL DECLARE tabav9 avion9_set_t. tabav9). END. ' . avion9_t(1. ' A320'' . . avion9_t(1. Nice' INSERT INTO hangar9 VALUES(2. ' Paris'250). BEGIN tabav9 := avion9_set_t( avion9_t(1. / Page 207 Copyright G. ' Caravelle' . ' A300'' . A300'' . Paris'200)). Paris'100). Mopolo-Moké Oracle et le modèle Objet Relationnel . . 300))). avion9_t(2. ' Concorde'' . .12. INSERT INTO hangar9 values (1.

12. • Ce code L3G s' exécute dans un espace d' adressage séparé. Page 208 Copyright G. Il a un accès contrôlé grâce aux objets LIBRARY. Mopolo-Moké Oracle et le modèle Objet Relationnel . PL/SQL OBJET I Les CALL OUT de PL/SQL OBJET • Il est possible d' exécuter un code d' L3G un (généralement C ou parfois PASCAL) à partir d' un code PL/SQL.

Import/Export I Plan • Généralités • Import/Export et performances • Le dictionnaire des données • Les Exports • Les Imports • Import/Export de BLOB • Divers Page 209 Copyright G.13. Mopolo-Moké Oracle et le modèle Objet Relationnel .

1 Généralités I Les utilitaires Import/Export prennent en compte tous les objets d’ORACLE OBJET. Si lors d’un import/export. il apparaît des types objets dans une table. • Les Librairies et fonctions spécifiques. • Les LOBs. Les objets manipulés lors des import/export sont les suivants : • Les ADTs et références d’ ADT. • Les Tableaux (ARRAY et VARRAY) . Mopolo-Moké Oracle et le modèle Objet Relationnel . elle sera considérée comme orientée objet. I I Page 210 Copyright G.13. • Les Nested Tables. • Les DIRECTORIES.

Mopolo-Moké Oracle et le modèle Objet Relationnel .1 Import/Export et performance I Les performances d’import/export décroissent si export/import : • De données volumineuses • de données objets de tables objets • des tables n' ayant aucune référence vers les User Defined Type Page 211 Copyright G.13.

au moment de l’Export.13. Page 212 Copyright G. la valeur du type OID (TOID). Mopolo-Moké Oracle et le modèle Objet Relationnel .bsq • Elle contient toutes les informations à propos des définitions des types exportés. Pour les types.INCEP. est enregistrée. • Elle sera utilisée pour différencier les types modifiés des types qui ont été remplacés depuis le dernier Export.2 Le Dictionnaire de données I La table SYS. définie dans sql.

3 Les Exports I Les définitions de types utilisées par une table sont incluses dans l’ export. Mopolo-Moké Oracle et le modèle Objet Relationnel . uniquement si elles appartiennent au même schéma. Page 213 Copyright G.13.

4 Les Imports I OID et Import • L’import préserve les OID des Types . Mopolo-Moké Oracle et le modèle Objet Relationnel . des tables objets et des lignes exportées • La valeur de l’OID exportée ne doit pas être différente en cas d' export • un COMMIT est effectué après chaque table exportée • En cas de CREATE OR REPLACE l’import détermine le dégré d' utilisation du type et supprime toute les tables qui l' utilesent Page 214 Copyright G.13.

5 Import/export des BLOBs I L’administrateur doit manuellement se préoccuper de la sauvegarde des fichiers binaires externalisés Oracle assure la sauvegarde des Localisations (Locators) des fichiers Binaires I Page 215 Copyright G.13. Mopolo-Moké Oracle et le modèle Objet Relationnel .

13.6 Divers
I

En version objet, il n’y a pas de différence ou d’impact sur la commande EXPLAIN PLAN. La commande ANALYZE supporte désormais les extensions à l’objet.
• De nouvelles syntaxes apparaissent (ANALYZE COLUMN … VALIDATE REF).

I

Page

216

Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel

14. CONCLUSION
I

Le modèle Objet Relationnel est un compromis entre le modèle objet pur et le modèle relationnel. Il permet une approche évolutive vers l' objet Il est nécessaire dès à présent d’envisager la mise en place d' applications tests ou une migration L' option Objet permet d' étendre le noyau Oracle (cartouche : son, image, vidéo, texte, …)

I

I

Page

217

Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel

15. Exercices
I

PLAN
• Objectif du TP • Définition du schéma d' objets • PL/SQL et Procédures stockées • Insertion des objets • Consultation des objets • Mise à jour des objets • Les vues

Page

218

Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel

15. Exercices
I

Objectif du TP
• Manipuler une base de données objet relationnelle • Les points que nous visons sont :
– concevoir et créer le schéma d' base de données objet une relationnelle – consulter les objets du schéma en exploitant entre autre les nouveaux opérateurs tels que TABLE, VALUE, ... – effectuer des insertions, mises à jour et suppressions dans ce schéma en exit – Manipuler des objets dans PL/SQL – Manipuler les vues objets sur les tables rélationnelles – manipuler des objets volumineux

Page

219

Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel

15. Mopolo-Moké Oracle et le modèle Objet Relationnel . Exercices I Définition du schéma d' objets • Schéma conceptuel EMPLOYE # * ° * * ° * * EMPNO ENAME PRENOMS {de 0 à 4 prénoms} 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.

Marketing.15. Humaines. Finance} Localisation du département (voir DEPT DEPTNO DNAME LOC varchar2(30) NOTE : prendre en compte les contraintes attributs UNIQUE ou OBLIGATOIRE schéma page précédente) Page 221 Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel . PDG} Salaire entre 1500 et 15000 CV Date de Naissance Date embauche : doit être supérieure Date_Naiss Nr. Resources. Planton. Ventes. Exercices I Définition du schéma d' objets • Description des entités 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. de département doit être entre 1000 et 9999 Nom du département {Recherche. Directeur. Secrétaire.2) CLOB date date number(4) varchar2(30) Libellé Numéro Employé Nom EMPLOYE : En lettre capitales tableau de 4 prénom max Métier de l’ employé {Ingénieur.

Mopolo-Moké Oracle et le modèle Objet Relationnel . – NOTE : LIRE L' ENSEMBLE DU TP PUIS CHAQUE SECTION ENTIEREMENT Page 222 Copyright G. DEPT_t) sont à faire – les éléments des Types Tables (listes) sont des références vers les types incomplets précités – les méthodes sont à déclarer dès la création des types – l' action de chaque méthode doit être limitée RESTRICT_REFERENCES – chaque "Type objet" doit contenir une méthode de comparaison MAP ou ORDER – les index seront localisés dans le Tablespace TS_INDEX_RES et les tables dans le Tablespace TS_TABLE_RES les index et les données des LOB internes sont à localiser dans le tablespace TS_LOB_RES.15. Exercices I Définition du schéma d' Objets • Suggestions – Toutes les tables doivent être des tables objets – les liens 1:N ou N:M sont systématiquement modélisés via le type REF si 1 ou NESTED TABLE si N – les déclarations des types FORWARD ou INCOMPLETS (EMPLOYE_t.

Définir maintenant vos types EMPLOYE_T.… Vous devez y déclarer les champs ou attributs des types. Page 223 Copyright G. DEPT_T. les méthodes et les liens ou Nested Tables Note : pour les méthodes et les liens. Créer le type ARRAY tab_prenoms_t nécessaire pour gérer la liste des PRENOMs 3. voir plus loin. Il n' pas nécessaire de définir tous les types en FORWARD est 2. Exercices I Création des types • Les étapes 1. Mopolo-Moké Oracle et le modèle Objet Relationnel . Créer les types FORWARD ou INCOMPLETS appropriés.15. Créer le Type Table (liste) nécessaire : ces éléments seront des références vers des EMPLOYE_t 4.

le nom et les prénoms de chaque Employé qui y travaillent. . Exercices I Création des types • Les méthodes 1.15. Les méthodes pour ordonner les éléments des types – écrire pour chaque type une méthode ORDER ou MAP.. • Static function getInfoEmp(deptno) return boolean 2. Les méthodes de consultation – introduire une méthode de classe qui affiche les informations (.) sur un DEPT connaissant son numéro • static function getDept (deptno) return boolean. – écrire une méthode de classe qui affiche pour un DEPT donné. Mopolo-Moké Oracle et le modèle Objet Relationnel . Il est nécessaire d' utiliser au moins une fois chacune de ces méthodes. Page 224 Copyright G..

Mopolo-Moké Oracle et le modèle Objet Relationnel . -. RefType2 REF type). Il ne s' que des déclarations.suppression dans un lien . -.modification du lien 4. aucune méthode n' encore été a implémentée.updateLinkNomColonneNested (RefType1 REF type. agit Page 225 Copyright G. dans cette phase. Les méthodes de gestion des Liens Introduire pour chaque Lien Multivalué les procédures suivantes : . -.addLinkNomColonneNested(RefType1 REF type).pour ajouter dans la liste . Notes • • ces méthodes DOIVENT être en Lecture seule (PRAGMA RESTRICT_REFERENCES) sauf celles décrites en 3.deleteLinkNomColonneNested (RefType1 REF type).15. Exercices I Création des types • Les méthodes 3.

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. DEPT_O comme étant des tables objets • Les contraintes d’intégrités – Définir les contraintes d' intégrités d' entités et de références sur chacune des tables – Définir les contraintes d' intégrités de domaine (cf. Exercices I Création des tables • Créer les tables EMPLOYE_O.15. Mopolo-Moké Oracle et le modèle Objet Relationnel .

il être unique ? Page 227 Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel . Exercices I Création 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 créés implicitement sont à localiser dans TS_INDEX_RES – les données et les index des LOB internes sont à localiser dans le Tablespace TS_LOB_RES I Création index • Créer un index unique sur la colonne dname de DEPT_o • créer un index sur la colonne implicite Nested_table_id de la Nested Table.15. Peut .

L' intégrité des objets doit être assurée I Mise à jour des objets • Modifier la localité d' département connaissant son un nom • Modifier la date d' embauche d' Employé un connaissant son nom sachant qu’ il doit travailler dans l’ un des départements suivants : ‘Recherche’ .15. Exercices I Insertion des objets • Insérer 2 ou 3 objets dans chacune des tables créées précédemment. ‘Finance’ ou ‘Ressources Humaines’ • Supprimer un DEPT Page 228 Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel .

Exercices I Consultation des objets • Faire un Listing des DEPTs triés par nom • Pour un DEPT donné.15. Mopolo-Moké Oracle et le modèle Objet Relationnel . lister tous les EMPLOYEs qui y travaillent I PL/SQL et Procédures stockées • Implémenter les méthodes décrites plus haut au niveau des types DEPT et EMPLOYE • tester les méthodes Page 229 Copyright G.

Le type objet associé doit s' appeler old_DEPT_t. Y insérer 2 lignes • Créer un trigger INSTEAD OF qui permet d' insérer à travers la vue dans la table DEPT_r et DEPT_o • Manipuler (insert. delete. update. Mopolo-Moké Oracle et le modèle Objet Relationnel .15. La structure de cette table est celle du type DEPT_t sans les liens • Insérer 3 ou 4 objets dans cette table • Créer une vue objet DEPT_v masquant toutes les colonnes de cette table. select) via la vue Page 230 Copyright G. Exercices I Les vues • créer une table relationnelle (non objet) DEPT_r.

Sign up to vote on this title
UsefulNot useful