P. 1
Oracle SQL 3

Oracle SQL 3

|Views: 275|Likes:
Publié parraitmansour8013

More info:

Published by: raitmansour8013 on May 11, 2012
Droits d'auteur :Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

03/22/2015

pdf

text

original

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

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

LES TYPES ABSTRAITS (COMPLEXES) I Les Types de donnees Abstraits(ADT) SPECIFICATION DU TYPE DECLARATION DES ATTRIBUTS DECLARATION DES METHODES CORPS DU TYPE IMPLEMENTATION DES METHODES Page 10 Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel .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.4. {MAP | ORDER} MEMBER function_specification. [WNDS. … nomAttributN typeDeDonnée. TRUST])] }) Note : les clauses seront décrites par la suite 11 Page Copyright G. RNPS. Mopolo-Moké Oracle et le modèle Objet Relationnel . CREATE OR REPLACE TYPE pilote_t. • Syntaxe de création d’un type objet CREATE [OR REPLACE] TYPE nomType AS OBJECT( { nomAttribut1 typeDeDonnée. {STATIC | MEMBER} {functionSpecification | procedureSpecification } [PRAGMA RESTRICT_REFENCES ({nomFonction|default}. RNDS. WNPS.

type abstrait défini préalablement Tel VARCHAR2(12). adresse REF adresse_t. Code_Postal NUMBER(5). salaire NUMBER(7. Mopolo-Moké Oracle et le modèle Objet Relationnel . -.-. • Type abstrait avec champs complexes CREATE OR REPLACE TYPE Pilote_t AS OBJECT( PL# 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). dnaiss DATE.4. 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). Rue VARCHAR2(20). nom VARCHAR2(12). Page 12 Copyright G.2) ).référence sur une adresse Tel VARCHAR2(12). nom VARCHAR2(12). Ville VARCHAR2(20)). dnaiss DATE.2)). adresse adresse_t.

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

RNDS. les données/résultats (IN/OUT). RNPS.4. STATIC). – Une clause de langage (PL/SQL. Page 14 Copyright G. WNPS. Mopolo-Moké Oracle et le modèle Objet Relationnel .etc…) – Une implémentation. – Un ensemble de résultats retournés par la méthode. Java. – PRAGMA RESTRICT_REFERENCE :WNDS. – Un ensemble d' indicateurs précisant la nature de la méthode (MAP/ORDER MEMBER. les résultats (OUT). les appels par référence (CALL-BY-REFERENCE). C. – Un ensemble d' exceptions. MEMBER. TRUST) – Un nom spécifique (un alias). 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).

4. – STATIC Function : Une méthode statique n' pas a l' objet courant comme paramètre implicite. 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. – ORDER Function: permet de comparer deux objets. Mopolo-Moké Oracle et le modèle Objet Relationnel .

MEMBER FUNCTION setPiloteSalaire(SELF IN OUT ref_pilote_t. salaire NUMBER(7.4.2). Mopolo-Moké Oracle et le modèle Objet Relationnel .RNPS) ). PRAGMA RESTRICT_REFERENCES(getPiloteSalaire. adresse adresse_t.le paramètre SELF doit être passé en paramètre si l’ on souhaite modifier l’ objet courant dans UNE FONCTION.type abstrait défini préalablement Tel VARCHAR2(12). newSalaire IN NUMBER) RETURN BOOLEAN. -. 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). plNum IN NUMBER. MEMBER PROCEDURE testSetSalaire. nom VARCHAR2(12). dnaiss DATE. WNDS). MEMBER FUNCTION getPiloteSalaire RETURN NUMBER. PRAGMA RESTRICT_REFERENCES(setPiloteSalaire. / NOTE : . Ce passage n’ est pas nécessaire s’ il s’ agit d’ une PROCEDURE Page 16 Copyright G.

MEMBER PROCEDURE testSetSalaire IS retour BOOLEAN. return true. / Page 17 Copyright G. 10000). newSalaire IN NUMBER) RETURN BOOLEAN IS BEGIN IF pl# = plNum THEN salaire := newSalaire.setPiloteSalaire(10. END. Mopolo-Moké Oracle et le modèle Objet Relationnel . END. END IF. MEMBER FUNCTION setPiloteSalaire (SELF IN OUT ref_pilote_t. BEGIN retour := Self. ELSE return false.4. END. plNum IN NUMBER. 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.

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

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

pour que deux objets soient égaux. 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. C1 != C2 • Par défaut. la valeur de chacun de leurs attributs doit être égale. Exemple : C1 = C2. Mopolo-Moké Oracle et le modèle Objet Relationnel .4. Page 20 Copyright G. LES TYPES ABSTRAITS (COMPLEXES) I Comparaison d’ADT • Soit deux ADT C1 et C2 d’un type Type 1.

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. VARCHAR2. Mopolo-Moké Oracle et le modèle Objet Relationnel . NUMBER. – L’ordre des objets est défini par rapport à une valeur scalaire RENDUE PAR LA FONCTION. 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. La valeur scalaire peut être de type(DATE.4.

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

4. 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 .

Mopolo-Moké Oracle et le modèle Objet Relationnel . / CREATE TABLE adresse2_table(adr adresse2_t ). INSERT INTO adresse2_table VALUES ( adresse2_t(3. 6100. SQL> SELECT * FROM adresse2_table ORDER BY adr. ’rue du port’. INSERT INTO adresse2_table VALUES ( adresse2_t(1. ’Nice’. ’Nice’. ’Centre’)). Ville VARCHAR2(20). ’Centre’)). ’rue des garages’. 6000. ’Nord’)).4. 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. ’Nice’. INSERT INTO adresse2_table VALUES( adresse2_t(2. Rue VARCHAR2(20). quartier VARCHAR2(20) ). ’rue du congres’. ’Ouest’)). 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). Code_Postal NUMBER(5). 6000. ’rue du congres’. ’Nice’. 6300. INSERT INTO adresse2_table VALUES( adresse2_t(2.

PRAGMA RESTRICT_REFERENCES (compAdresse. / NOTE : La valeur de Comparaison des instance de de adresse2_t sera : ville||rue||numero. RNDS) ). Rue VARCHAR2(20). quartier VARCHAR2(20). END. Ville VARCHAR2(20). / CREATE OR REPLACE TYPE BODY adresse2_t IS MAP MEMBER FUNCTION compAdresse RETURN VARCHAR2 IS BEGIN RETURN ville||rue||numero. END. WNDS. WNPS. Ce qui réduit la comparaison à celle d ’un type scalaire Oracle Page 25 Copyright G. 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). RNPS. Code_Postal NUMBER(5). MAP MEMBER FUNCTION compAdresse RETURN VARCHAR2. Mopolo-Moké Oracle et le modèle Objet Relationnel .4.

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

RNDS) ). Page 27 Copyright G.4. Sud. Nord. WNDS. CREATE OR REPLACE TYPE adresse2_t as object( Numero NUMBER(4). PRAGMA RESTRICT_REFERENCES (compAdresse. Mopolo-Moké Oracle et le modèle Objet Relationnel . Ville VARCHAR2(20). RNPS. Code_Postal NUMBER(5). WNPS. Est et enfin Ouest. Centre. Rue VARCHAR2(20). ORDER MEMBER FUNCTION compAdresse (adr IN adresse2_t) RETURN NUMBER. 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. quartier VARCHAR2(20). MAP MEMBER ne suffit plus.

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 position1 := 4.quartier WHEN ’Nord’ THEN position2 := 1. Page 28 Copyright G.numero. concAdr1 VARCHAR2(60) := SELF. WHEN ’Sud’ THEN position2 := 3. WHEN ’Sud’ THEN position1 := 3. WHEN ’Ouest’ THEN position2 := 5. WHEN ’Est’ THEN position2 := 4. END CASE.quartier WHEN ’Nord’ THEN position1 := 1.rue|| adr. WHEN ’Centre’ THEN position1 := 2. WHEN ’Centre’ THEN position2 := 2. WHEN ’Ouest’ THEN position1 := 5. concAdr2 VARCHAR2(60) := adr.ville|| adr.ville||SELF. CASE adr. BEGIN CASE SELF.numero. position2 NUMBER :=0. END CASE.4. Mopolo-Moké Oracle et le modèle Objet Relationnel .

4. 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. END IF. concAdr2 := position2|| concAdr2. END. ELSIF concAdr1 < ConcAdr2 THEN return -1. / Page 29 Copyright G. ELSIF concAdr1 > ConcAdr2 THEN return 1. Mopolo-Moké Oracle et le modèle Objet Relationnel .

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

4. ni des LOBs. hériter d’ un type. supprimer. • DROP ANY TYPE. exécuter les méthodes d’ un type) • CREATE ANY TYPE. 31 Page Copyright G. • 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. modifier. 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. • ALTER ANY TYPE. ni des NESTED TABLES. Mopolo-Moké Oracle et le modèle Objet Relationnel .

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.4. Mopolo-Moké Oracle et le modèle Objet Relationnel . LES TYPES ABSTRAITS (COMPLEXES) I Modification d’un ADT • La modification d' type permet : de un Recompiler le type en cas de modifications.

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

RNDS)). Rue VARCHAR2(20). RNPS. nom_rue IN varchar2) return boolean ). ORDER MEMBER FUNCTION compAdresse (adr IN adresse3_t) RETURN NUMBER. WNPS. Page 34 Copyright G.4. RNDS). Member function setRue(self IN OUT adresse3_t. ORDER MEMBER FUNCTION compAdresse (adr IN adresse3_t) RETURN NUMBER. Rue VARCHAR2(20). Mopolo-Moké Oracle et le modèle Objet Relationnel . PRAGMA RESTRICT_REFERENCES (compAdresse. Code_Postal NUMBER(5). 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). Ville VARCHAR2(20). WNDS. Ville VARCHAR2(20). WNPS. PRAGMA RESTRICT_REFERENCES (compAdresse. RNPS. WNDS. Code_Postal NUMBER(5). ALTER TYPE adresse3_t REPLACE AS OBJECT( Numero NUMBER(4).

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. Mopolo-Moké Oracle et le modèle Objet Relationnel .4. numero1 IN number) return boolean. – Exemple 2 : suppression Alter type adresse3_t drop member function setNumero (self IN OUT adresse3_t.

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)). .. – Exemple 3 : Suppression Alter type adresse3_t drop attribute state2.. – Exemple 2 : Modification Alter type adresse3_t modify attribute state2 varchar2(30).)] DROP ATTRIBUTE attribute [( attribute.. Mopolo-Moké Oracle et le modèle Objet Relationnel .. Page 36 Copyright G.)] – Exemple 1 : ajout Alter type adresse3_t add attribute state varchar2(20).

6560. Au prochain accès les objets sont à nouveau validé. ’AM’). Alter type adresse3_t modify attribute state varchar2(30) * ERREUR à la ligne 1 : ORA-22312: vous devez indiquer l' option CASCADE ou INVALIDATE 37 Page Copyright G. – L’option CASCADE permet de propager immédiatement la modification sur les objets dépendants.4. S’il y a des dépendances. – L’option INVALIDATE permet d’invalider provisoirement tous les objets dépendants. ’Valbonne’. la modification d’un type n’est possibles qu’en utilisant les options INVALIDATE et CASCADE. 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. ’rue de la gare’. LES TYPES ABSTRAITS (COMPLEXES) I Modification d’un ADT • Les options INVALIDATE et CASCADE. Insert into adresse3 values(1.

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

4. un domaine index ou une clé cluster Page 39 Copyright G. 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. Mopolo-Moké Oracle et le modèle Objet Relationnel .

Page 40 Copyright G. Syntaxe pour suppression d' type un DROP TYPE nomType [FORCE | VALIDATE] – L' option FORCE permet de supprimer un type en ignorant les dépendances. – Exemple • DROP TYPE BODY adresse_t. Mopolo-Moké Oracle et le modèle Objet Relationnel . – 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. 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. • • Syntaxe pour la suppression du corps d' type un DROP TYPE BODY nomType .4. DROP TYPE adresse_t FORCE. La suppression du corps d' type permet d' un éviter de supprimer la spécification du type. DROP TYPE Employee_t VALIDATE.

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.

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

LES TYPES ABSTRAITS (COMPLEXES) I Visualisation des informations sur les ADT • SQL> desc user_types TYPE_NAME TYPE_OID TYPECODE ATTRIBUTES METHODS PREDEFINED INCOMPLETE FINAL INSTANTIABLE SUPERTYPE_OWNER SUPERTYPE_NAME LOCAL_ATTRIBUTES LOCAL_METHODS TYPEID Page 43 Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel .4.

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

PROTECTED et PUBLIC • Le moteur Oracle ne supporte pas l' encapsulation telle que définie. C' au programmeur de se limiter à est l' appel de méthodes DONNEES METHODES Page 45 Copyright G. 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.4. Mopolo-Moké Oracle et le modèle Objet Relationnel .

dans des fonctions PL/SQL). LES TYPES ABSTRAITS (COMPLEXES) I Constructeur • Un Constructeur est une méthode spéciale ayant le même nom que le type. • un constructeur sert à la création et à la mise à jour des objets (dans les ordres SQL : INSERT. Mopolo-Moké Oracle et le modèle Objet Relationnel . Le constructeur du type ADRESSE_T s’appelle ADRESSE_T. • Un Constructeur en Oracle est appelable partout ou une méthode peut être appelée • Un constructeur par défaut est disponible. 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.4. UPDATE.

6000. ’0493825084’.50) ). Pour la colonne. 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. adresse_t(1. ’NICE’). ’Jean DUPOND’.adr = ref_adresse_t(5. 12000. // Insertion d ’ un élement de la table objet. Page 47 Copyright G. ’12-JUN-47’.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. • NOTE : l’appel de ref_PILOTE_T(…) est facultatif – Modification via un constructeur UPDATE o_pilote op set op.4. ’rue Arago’. ' de la traverse' rue . Mopolo-Moké Oracle et le modèle Objet Relationnel . ' ) Nice' Note : . le // Constructeur adresse_t sera appelé INSERT INTO o_pilote VALUES ( ref_pilote_t(1.tous les champs doivent être concernés .

PRAGMA RESTRICT_REFERENCES (compAdresse. STATIC FUNCTION cons_adresse4_t(numero Number . Ville VARCHAR2(20). / Page 48 Copyright G. 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). rue VARCHAR2 ) RETURN Adresse4_t . ORDER MEMBER FUNCTION compAdresse (adr IN adresse4_t) RETURN NUMBER. RNDS)). Code_Postal NUMBER(5). WNDS.4. Mopolo-Moké Oracle et le modèle Objet Relationnel . RNPS. WNPS. Rue VARCHAR2(20).

null.numero>adr. end. return 0. end if. End. end. / Page 49 Copyright G. if self. 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 . null). ORDER MEMBER FUNCTION compAdresse (adr IN adresse4_t) RETURN NUMBER is begin if self.numero then return -1. end if. Mopolo-Moké Oracle et le modèle Objet Relationnel . rue VARCHAR2 ) RETURN Adresse4_t IS begin return adresse4_t(numero.numero then return 1 .numero<adr. rue.4.

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

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.0 PL# :2 Nom : Dupond Dupont Adresse : (1.0 CREATE TABLE r_pilote(pil PILOTE_T). ’ R Gare’ . 75 ’ Paris ’ ) Tél : ’ 0141825084’ Dnaiss : ’ 12-10-45 ’ Salaire : 13200. Declare Begin End. / Page pil_var PILOTE_T. Mopolo-Moké Oracle et le modèle Objet Relationnel . ’ R Arago’ . 6000 ’ Bruxelles ’ ) Tél : ’0493825084’ Dnaiss : ’ 12-10-40 ’ Salaire : 12000. 51 Copyright G.4.

Mopolo-Moké Oracle et le modèle Objet Relationnel .5. 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. 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. … )] 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.5. 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. Mopolo-Moké Oracle et le modèle Objet Relationnel . WITH OBJECT IDENTIFIER Page 57 Copyright G. attribut2.

les attributs Attribut1. DEFAULT NOTES : . Mopolo-Moké Oracle et le modèle Objet Relationnel . attribut2. .5.. 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.

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

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

REF(OP) ROWID 000028020985B3AD5BB8C04D39BF81C8DB5573EFE53AFC0C48 6CA3447283858183F28672A6020001 B20000 AAAIFzAAIAAAAGyAAA 0000280209A36782FB22EE44409D6560943CFD7A433AFC0C486 CA3447283858183F28672A6020001 B20001 AAAIFzAAIAAAAGyAAB Page 61 Copyright G. ROWID FROM o_ref_pilote op. Mopolo-Moké Oracle et le modèle Objet Relationnel .5. 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 . 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.

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

6. 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. 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.

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

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

un VARRAY est manipulable comme un TOUT .dans les Ordres SQL (UPDATE. 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. il peut être stocké en dehors du segment de la table . INSERT. DELETE).Un constructeur d ’ objet existe aussi sur un type VARRAY . NOTION DE COLLECTION I Les tableaux variables (VARRAY) • Quelques contraintes et informations : .6.Le stockage d’ un VARRAY se fait à l’ intérieur de la table ou il a été déclaré .si un VARRAY est trop grand.

• Caractéristiques – Une Nested Table peut être un champ. 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. – Les Store Tables sont des segments physiques où sont stockés les instances des Nested Tables Page 68 Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel .6. une variable ou un paramètre dont le type de donnée est un « type table ». un attribut.

0 3 Bleck @3 222222 12500. 233399 15000.. 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.6..0 4 Dragon bol @. du Congrès 06100 Nice @2 @2 15 av.0 @1 Nested_table_id Numéro Rue Code Postal Ville @1 60 r.0 2 Zembla @2 5551111 23000. Mopolo-Moké Oracle et le modèle Objet Relationnel . 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.

6. VA VARCHAR2(20).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 . . Pilote REF ref_pilote_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. --type abstrait défini préalablement CREATE OR REPLACE TYPE REF vol2_set_t AS TABLE OF REF ref_vol2_t . VD 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) . Mopolo-Moké Oracle et le modèle Objet Relationnel . Av_rem CLOB. Av_type VARCHAR2(12).6.Utilisation du type table VOL2_SET_T CREATE OR REPLACE TYPE Avion2_ns_t AS OBJECT( Av_num NUMBER(3). Page 71 Copyright G.

Mopolo-Moké Oracle et le modèle Objet Relationnel .6. Av_rem CLOB. Av_cap NUMBER(3). Exemple -. 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. 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_loc VARCHAR2(20).Table non Objet avec Table imbriquée CREATE TABLE Avion2_ns ( Av_num NUMBER(3). CREATE TABLE avion2_ns OF Avion2_ns_t NESTED TABLE Av_liste_vol STORE AS vols2_set .Table objet avec Table imbriquée. Av_type VARCHAR2(12). -. Page 72 Copyright G.

paramètre ou résultat en PL/SQL. 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. Page 73 Copyright G. variable. attribut d' ADT. Mopolo-Moké Oracle et le modèle Objet Relationnel . UPDATE. NOTION DE COLLECTION I Les tables imbriquées (Nested Table) : CARACTERISTIQUES • ces tables sont accessibles indirectement que via un SELECT.6.

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

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

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

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. 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. • 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.

• 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. 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. Page 78 Copyright G. – CREATE INDEX IDX_STORE_AVION3_SET ON STORE_AVION3_SET(NESTED_TABLE_ID).6. Mopolo-Moké Oracle et le modèle Objet Relationnel . av_type).

– CREATE TABLE hangar4 ( hangar# number(2). Mopolo-Moké Oracle et le modèle Objet Relationnel . 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.6. 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). Page 79 Copyright G.

i]) TRIM(n) DELETE(m[. NOTION DE COLLECTION I Méthodes sur les collections Nom EXISTS (n) COUNT LIMIT FIRST and LAST PRIOR and NEXT EXTEND(n[. Mopolo-Moké Oracle et le modèle Objet Relationnel .6. 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.

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

i number :=1. lav.limit).6.count THEN exit.put_line (lav(i).put_line (’AVION [’ || i || ’] =’ || lav(i)).count || ’LIMIT =’ || lav.av# || ’ ’ || lav(i).avtype). update hangar set avions=lav where hangar#=2. dbms_output. dbms_output. END. END IF. i := i + 1. END LOOP. END. BEGIN SELECT avions INTO lav FROM hangar where hangar#=2.av#=20.dbms_output. / Page 82 Copyright G.put_line(’COUNT=’ || lav. LOOP -. IF i = lav. 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. Mopolo-Moké Oracle et le modèle Objet Relationnel .

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

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

REF. MULTICAST. RETURNING. CAST. 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. Mopolo-Moké Oracle et le modèle Objet Relationnel .7. … ) sont introduits pour faciliter la manipulation des objets Page 85 Copyright G. les tables Relationnelles sont identifiées uniquement par les ROWID • De nouveaux opérateurs et mots clés(TABLE.

7. Tel VARCHAR2(12). • 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). nom VARCHAR2(12). dnaiss DATE. adresse ADRESSE_T. 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. salaire NUMBER(7.2)). -.adresse_t type abstrait défini préalablement CREATE TABLE o_pilote4 OF pilote4_t . Mopolo-Moké Oracle et le modèle Objet Relationnel . Page 86 Copyright G.

Page 87 Copyright G.7. Mopolo-Moké Oracle et le modèle Objet Relationnel . 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 ). -.la colonne p est un attribut de type pilote4_t Mais r_pilote 4 n ’ est pas une table objet.

VALUES avec ensuite application du constructeur • Exemple : INSERT INTO o_pilote4 VALUES ( pilote4_t(1. Page 88 Copyright G. . ' Traverse des Brucs' . 12-JUN-57'16000. Mopolo-Moké Oracle et le modèle Objet Relationnel .6560. ' VALBONNE' ). ’rue Arago’. ’12-JUN-47’. ' Alain DURAND' . CREATION ET MANIPULATION D’OBJETS I Insertion d’une table objet • L’ insertion se fait avec la commande INSERT INTO … .50) ). adresse_t(1. adresse_t(1.6000. 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.7.50) ). ' 0493825096'' . ’Jean DUPOND’. ’0493825084’. ’NICE’). 12000.

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

nom FROM o_pilote4 o WHERE o. 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 . NOM REF(O) Jean DUPOND ROWID AAAAw/AAFAAAAJWAAA 00002802096ABAF6D9B23511D2A64E00A0245FEFFD6ABA F6D8B23511D2A64E00A0245FEFFD014002560000 Page 90 Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel . ref(o).7.

rowid From r_pilote4 r Where r.NOM Alain DURAND ROWID AAAAxBAAFAAAAJgAAA Page 91 Copyright G. 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.p.nom. rowid.7. ERROR at line 1: ORA-00904: invalid column name r Select r.p.p.nom.nom = ’Alain DURAND’ . P. ref(r ) From r_pilote4 r Where r.p. Mopolo-Moké Oracle et le modèle Objet Relationnel .nom = ' Alain DURAND’ .

numero = 22 WHERE o. CREATION ET MANIPULATION D’OBJETS I Mise à jour d' table objet une • La commande utilisée pour les mises à jour est UPDATE … SET … [WHERE … ]. Les Colonnes peuvent être mises à jour directement. à 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’ . Mopolo-Moké Oracle et le modèle Objet Relationnel . UPDATE o_pilote4 o SET o. Page 92 Copyright G.nom= ’Jean DUPOND’ .adresse.7.

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

7. CHECK • Ces contraintes peuvent être exprimées pendant la création de la table ou pendant sa mise à jour. CREATE TABLE nomTableObjet OF nomType ( {{colonne | attribut} [DEFAULT expr] [contrainteDeNiveauColonne].}) ALTER TABLE nomTableObjet ADD ContrainteDeNiveauTable. 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. | contrainteDeNiveauTable.. Mopolo-Moké Oracle et le modèle Objet Relationnel . Page 94 Copyright G.. NULL. .

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 nl_adresse adresse NOT NULL. CONSTRAINT chk_salaire CHECK (salaire >2000 AND Salaire<70000).rue IS NOT NULL) ). CONSTRAINT pk_o_pilote5 PRIMARY KEY(pl#). CONSTRAINT nl_adresse_rue CHECK(adresse.7. NOTE : Il n’est pas possible de poser des contraintes au niveau TYPE Page 95 Copyright G. ’DDMON-YYYY’)). Mopolo-Moké Oracle et le modèle Objet Relationnel . CONSTRAINT chk_dnaiss CHECK(dnaiss<to_date(’12-OCT-1998’.

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

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.adresse. Mopolo-Moké Oracle et le modèle Objet Relationnel .p. – Exemple INSERT INTO r_pilote4 -.nom.VILLE Jean DUPOND Mt Doc Page 97 Copyright G.p.table objet WHERE p.table non objet SELECT VALUE (p) FROM o_pilote4 p -.ADRESSE.nom LIKE ’%DUPOND%’.p.ville FROM r_pilote4 rp where rp.7. -. P.NOM P.nom like ’%DUPOND%’.consultation de la table non objet r_pilote4 SELECT rp. rp.

table objet WHERE px.7.nom = ’Jean DUPOND’. PX 0000280209E4715187332C11D1A51300A0245FEFFDE47 15186332C11D1A51300A0245FEFFD0140010C0000 Page 98 Copyright G. 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é. – Exemple SELECT REF (px) FROM o_pilote4 px -. Mopolo-Moké Oracle et le modèle Objet Relationnel .

7. Page 99 Copyright G. ' PARIS'' . REF pilote4_t). – Exemple : -.nom =' DUPOND' Jean . 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. VARCHAR2(20).Création de la table vol4 CREATE TABLE Vol4 ( Vol# VD VA Pilote NUMBER(4) PRIMARY KEY. FROM o_pilote4 p WHERE p. Mopolo-Moké Oracle et le modèle Objet Relationnel . TOULOUSE'REF(p) . VARCHAR2(20). INSERT INTO vol4 SELECT 200.

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

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

REFTOHEX(PILOTE) 00002202085793DF953AEE494F96D4165C98E440 A32DC775DDC8F54618A57420A774CDCACC Page 102 Copyright G. PILOTE 00002202085793DF953AEE494F96D4165C98E440 A32DC775DDC8F54618A57420A774CDCACC Select REFTOHEX(pilote) from vol4. 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. 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. Mopolo-Moké Oracle et le modèle Objet Relationnel .7.

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

LIENS D’ASSOCIATIONS I Généralités • D’ un point de vue conceptuel. • 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. Mopolo-Moké Oracle et le modèle Objet Relationnel . 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.

8. / --Création de type table (liste de vol) : Les éléments de cette liste sont des références vers des vols.Déclaration Forward des Types afin d' éviter l' interblocage dû au reférencement mutuel entre types CREATE OR REPLACE TYPE VOL6_T. 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. Page 106 Copyright G. LIENS D’ASSOCIATIONS I Gestion des liens d’associations Via des réferences -. 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 : .

Av_rem CLOB. Av_loc VARCHAR2(20). adresse adresse_t. Av_type VARCHAR2(12). Tel VARCHAR2(12).2). dnaiss DATE. 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). salaire number(7. Av_liste_vols Set_Vol6_t) / Page 107 Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel .8. 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 . 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). Avion# NUMBER(4). refPilote REF pilote6_t. VA VARCHAR2(20). refAvion REF avion6_t ) / Page 108 Copyright G.8. VD VARCHAR2(20). Pilote# NUMBER(4).

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 .8. Page 109 Copyright G. CONSTRAINT chk_salaire6 CHECK (salaire >2000 AND Salaire<70000) ) NESTED TABLE Pil_liste_vols STORE AS store_pil_liste_vols. CREATE TABLE AVION6 OF AVION6_T( CONSTRAINT pk_avion6 av# PRIMARY KEY ) NESTED TABLE av_liste_vols STORE AS store_av_liste_vols. LIENS D’ASSOCIATIONS I Définition des contraintes d' intégrités • La Définition des contraintes d' intégrité d' Entité.

Page 110 Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel . CONSTRAINT fk_pilote6 FOREIGN KEY (Pilote#) REFERENCES Pilote6.8. 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. CONSTRAINT fk_avion6 FOREIGN KEY (Avion#) REFERENCES AVION6 ).

ALTER TABLE VOL6 ADD (SCOPE FOR (refAvion) IS AVION6). Au lieu de 42 pour un REF normal ALTER TABLE STORE_AV_LISTE_VOLS ADD (SCOPE FOR (column_value) IS VOL6). 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. 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. Page 111 Copyright G. 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).

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

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

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

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

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

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

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

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

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

Mopolo-Moké Oracle et le modèle Objet Relationnel .8. à 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. LIENS D’ASSOCIATIONS I Suppression à travers les liens • Soient deux entités E1 et E2 associées à travers un lien 1:N ou. pour une plus grande efficacité. Lors de la suppression de Oe1 par exemple. ê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.

avion# INTO refvol1.pil_liste_vols FROM pilote6 p6 WHERE p6. pilote# . numavion. numpil. END. Mopolo-Moké Oracle et le modèle Objet Relationnel . DELETE FROM TABLE( SELECT p6.8.pl#=numpil ) listvols WHERE listvols.column_value = refvol1. / NOTE : On aura pu supprimer directement cet élément REF VOL6_T. 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). NUMBER(4). Page 122 Copyright G. NUMBER(4).

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

2 DELETE FROM TABLE(SELECT p6.column_value IS DANGLING .pil_liste_vols FROM pilote6 p6 WHERE p6. Page 124 Copyright G. • Exemple – suppression de toutes les références au VOLs supprimés du PILOTE Nr. 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.pl#=2) listvols WHERE listvols. Mopolo-Moké Oracle et le modèle Objet Relationnel .8.

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

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

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 ». Mopolo-Moké Oracle et le modèle Objet Relationnel . Page 127 Copyright G. 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.

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

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

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

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.

Mopolo-Moké Oracle et le modèle Objet Relationnel .9. 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 que A hérite de B. l’héritage simple Page 133 Copyright G. 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. Lien d’héritage I Généralités • Soit deux types A et B.9. • L’Héritage est le mécanisme de transmission des propriétés d’un type vers les types dérivés. • Oracle supporte depuis la version 9. On dit aussi que A est un fils de B ou que B est père de A.

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

9. On ne peut pas créer des sous-types à partir de lui Page 135 Copyright G. nom varchar2(20). MEMBER PROCEDURE afficher ) NOT FINAL. / – NOTE : • Si l’ option NOT FINAL n’ est pas précisé. 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). DateNaiss date.2) ). / CREATE OR REPLACE TYPE Employee_t UNDER Personne_t ( salaire number(7. Prenom varchar2(20). le type est FINAL. Mopolo-Moké Oracle et le modèle Objet Relationnel .

MEMBER PROCEDURE setSalaire(sal IN number).2) ).2).2).9. / CREATE OR REPLACE TYPE Employee_t UNDER Personne_t ( salaire number(7. 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. MEMBER PROCEDURE setSalaire(sal IN varchar2). / Page 136 Copyright G. MEMBER PROCEDURE afficher(coord position) ). Mopolo-Moké Oracle et le modèle Objet Relationnel . y number(5.

/ • • 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.9. OVERRIDING MEMBER PROCEDURE afficher ). 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.2). Mopolo-Moké Oracle et le modèle Objet Relationnel .

9. 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. Mopolo-Moké Oracle et le modèle Objet Relationnel . y1 IN NUMBER) ) NOT INSTANTIABLE NOT FINAL. 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). MEMBER PROCEDURE deplacer(x1 IN NUMBER. Page 138 Copyright G. y number(4). NOT INSTANTIABLE MEMBER FUNCTION surface RETURN NUMBER. 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.

CREATE OR REPLACE TYPE BODY CERCLE_T IS OVERRIDING MEMBER FUNCTION surface RETURN NUMBER IS BEGIN RETURN rayon*rayon.9. Mopolo-Moké Oracle et le modèle Objet Relationnel . END. / Page 139 Copyright G. 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). OVERRIDING MEMBER FUNCTION surface RETURN NUMBER ).

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

0). ' Dong'' Fei'' . Mopolo-Moké Oracle et le modèle Objet Relationnel . end.10000. • Autre cas : Un employé est forcement une personne – Exemple declare pers1 Personne_t := personne_t(' 122222' . ' Dong’ .. Page 141 Copyright G.9. emp1 Employee_t:= employee_t(' 222222' . Fei . – Il est possible de limiter la substitution sur certains TYPE CREATE TABLE o_personne3 OF personne_t IS OF ( EMPLOYEE_T ). ' Tong'' Jing . 10/10/90' . 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. 10/10/82' ). begin pers1 := emp1.

DATENAISS) -----------------------------------------------------------EMPLOYEE_T(’222222’. SYS_TYPEID. ’Dong’. 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). Mopolo-Moké Oracle et le modèle Objet Relationnel . ’Fei Fei’.9. 10000) Page 142 Copyright G. PRENOM. 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. VALUE(OP)(NUMINSEE. NOM. ’10/10/90’.

’Fei Fei’. DATENAISS. Mopolo-Moké Oracle et le modèle Objet Relationnel . TREAT(VALUE(OP)ASEMPLOYEE_T)(NUMINSEE. 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. SALAIRE) EMPLOYEE_T(’222222’.nom. ’10/10/90’. ’Dong’. 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. NOM.9. PRENOM. 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é. 10000) Page 143 Copyright G.

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

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

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. définies sur les tables (objets. relationnelles) : – vue relationnelle : une vue relationnelle est une vue construite sur les colonnes d’une table relationnelle.10. LES VUES I Les types de vues • On distingue 2 types de vues. relationnelles) ou autres vues (objets. 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 .10. Mopolo-Moké Oracle et le modèle Objet Relationnel . Page 147 Copyright G.

Page 148 Copyright G. 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). A la différence d' vue Objet. adresse adresse_t. Mopolo-Moké Oracle et le modèle Objet Relationnel . une vue objet.2). PIL_liste_vols2 Set_Vol6_t) NESTED TABLE pil_liste_vols2 STORE AS store_pil_liste_vols2.10. nom VARCHAR2(12). LES VUES I Création et manipulation de vues relationnelles • Une vue relationnelle peut être construite sur : une vue relationnelle. une table relationnelle ou une table objet. salaire NUMBER(7. Tel VARCHAR2(12). dnaiss DATE.

tel) AS SELECT Pl#. adresse. Tel FROM rpilote7 . • 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.ville =' NICE' . nom.10. Mopolo-Moké Oracle et le modèle Objet Relationnel . adresse. NOTE : pilote6 est une table objet mais pas la vue v_pilote6_nice Page 149 Copyright G.adresse. plnom. 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.

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. attribut2. Mopolo-Moké Oracle et le modèle Objet Relationnel . WITH OBJECT IDENTIFIER Page 150 Copyright G. Cette clause est obligatoire s' s' il agit d' vue sur une table objet ou une vue une objet.

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

CHAR(20).* FROM rPilote8 rp. Mopolo-Moké Oracle et le modèle Objet Relationnel . Page 152 Copyright G.10. 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) . DATE) / -. CHAR(20). adresse_t.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.

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

Page 154 Copyright G. Mopolo-Moké Oracle et le modèle Objet Relationnel .10. 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#).

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

Mopolo-Moké Oracle et le modèle Objet Relationnel .10. … ]) • Exemple 1 SELECT MAKE_REF(o_view_pilote . 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.2) 000050030A004CEB0BF16DB42911D2A65100A024 5FEFFD0000001426010001000100290000000000090 604002A0007000000200200000000000000001602C1 0300000000000000000000000000000000000000 Page 156 Copyright G. Dans le cas une contraire rend la prochaine référence libre. key[key. • Syntaxe MAKE_REF (nomVueObjet. MAKE_REF(o_view_pilote . 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 • Exemple 2 SELECT MAKE_REF(o_view_pilote . une nouvelle référence est attribuée. Page 157 Copyright G. MAKE_REF(o_view_pilote . 3) FROM dual.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. Mopolo-Moké Oracle et le modèle Objet Relationnel .10.

10. / Page 158 Copyright G.adresse. LES VUES I Le trigger INSTEAD OF • Le trigger INSTEAD OF permet de mettre à jour les tables sous-jascentes à une vue Complexe.ville.adresse. 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. Mopolo-Moké Oracle et le modèle Objet Relationnel .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. adresse_t. END.

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 .

Mopolo-Moké Oracle et le modèle Objet Relationnel . 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.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.0. 1 Généralités I Les LOBs : Large Objects ont été introduits par Oracle depuis la version 8.

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. Par contre.11. – Un LOB peut atteindre 4GO de taille alors qu' un LONG/LONG RAW est limité à 2GO Page 161 Copyright G. 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 . Mopolo-Moké Oracle et le modèle Objet Relationnel .

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

Un bloc Bitmap Index (chainage). Mopolo-Moké Oracle et le modèle Objet Relationnel . une variable PL/SQL. CLOB ou NCLOB.11. Des blocs de données. une variable hôte d' un programme. une variable SQL. 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. 2 Les LOB internes I Ce sont des LOB de type BLOB. Des blocs Bitmap. un paramètre ou un résultat d’une fonction Sa structure comprend :Une entête. une colonne d’une table. I I Page 163 Copyright G.

Page 164 Copyright G. CREATE TABLE LPILOTE OF LPILOTE_T( CONSTRAINT pk_lpilote PRIMARY KEY(pl#)) LOB (cv_texte.11. DATE. cv_anime) STORE AS (TABLESPACE tools STORAGE (NEXT 10K) DISABLE STORAGE IN ROW NUMBER(4). VARCHAR2(20). CLOB. 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 ).2). NUMBER(7. BLOB CHUNK 4). VARCHAR2(20). Mopolo-Moké Oracle et le modèle Objet Relationnel .

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.11. 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. 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.

NOCACHE. 2 Les LOB internes I Contrôle du stockage des LOBs internes • Les paramètres PCTVERSION. CHUNK. LOGGING.11. espace réservé pour conserver les versions précédentes des LOBs afin d' assurer la lecture CONSISTANTE. Mopolo-Moké Oracle et le modèle Objet Relationnel . CACHE. NOLOGGING. 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. ENABLE/ DISABLE STORAGE IN ROW permettent de contrôler le stockage des LOBs • PCTVERSION : vaut 10% par défaut.

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.write ou DBMS_LOB. à un écrire directement dans la ligne qui contient le LOB pour des raisons de PERFORMANCE • NOTE : les paramètres TABLESPACE. ENABLE (DISABLE)STORAGE IN ROW.11. OCIlobRead. Mopolo-Moké Oracle et le modèle Objet Relationnel .read – Note : Intitial et Next doivent être supérieurs à CHUNK • ENABLE (DISABLE) STORAGE IN ROW : autorise. CHUNCK ne peuvent être spécifiés qu' la création d' Table à une Page 167 Copyright G. DBMS_LOB.

11. Page 168 Copyright G. 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 .

2 Les LOB internes I Initialisation des LOBs internes • Lors d’ une insertion ou d’ une MAJ. Mopolo-Moké Oracle et le modèle Objet Relationnel .11. 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.

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

Mopolo-Moké Oracle et le modèle Objet Relationnel .11. 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. Les BFILE sont vus comme étant des données binaires I I Page 171 Copyright G. Le système de fichiers d’Oracle garde en mémoire le chemin d’accès de ce fichier.

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

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

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

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

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

BLOB ou NCLOB c’est la position de la valeur du LOB dans son segment de données Page 177 Copyright G.11. Mopolo-Moké Oracle et le modèle Objet Relationnel . 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.

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

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

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

11.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 .

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

buffer OUT RAW) Page 184 Copyright G. amount IN OUT BINARY_INTEGER. offset IN TEGER. amount IN OUT BINARY_INTEGER.11. buffer OUT RAW) 2. procedure READ(lob_loc IN BLOB. CLOB/NCLOB. procedure READ(lob_loc IN BFILE.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 . offset IN TEGER. BFILE 1. amount IN OUT BINARY_INTEGER. offset IN TEGER. buffer OUT VARCHAR2 CHARACTER SET LOB_LOC%CHARSET) 3. procedure READ(lob_loc IN CLOB CHARACTER SET ANY_CS.

INVALID_OPERATION Copyright G. 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.11. NOPRIV_DIRECTORY. NO_EXIST_DIRECTORY.

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

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

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

procedure WRITE(lob_loc IN OUT CLOB CHARACTER SET ANY_CS. CLOB/NCLOB. buffer IN RAW) 2.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. amount IN IN BINARY_INTEGER. buffer IN VARCHAR2 CHARACTER SET LOB_LOC%CHARSET) Page 189 Copyright G. BFILE 1.11. amount IN BINARY_INTEGER. offset IN TEGER. offset IN TEGER. 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 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.

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

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.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 .

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.11.

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

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

L’ un en lecture l’ autre en écriture. s' a ouvert un fichier le il fermer. Mopolo-Moké Oracle et le modèle Objet Relationnel .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. SINON RISQUE DE DEPASSEMENT du PARAMETRE SESSION_MAX_OPEN_FILES Page 196 Copyright G. 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.11.

Order by.11. Utiliser dbms_lob. Mopolo-Moké Oracle et le modèle Objet Relationnel . I I Page 197 Copyright G. select distinct.8 Contraintes sur les LOBs I Pas de LOB distribué Pas de chargements de LOB avec SQLLOADER en V8. join.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.11. Mopolo-Moké Oracle et le modèle Objet Relationnel .

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

Mopolo-Moké Oracle et le modèle Objet Relationnel .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. PL/SQL I Généralités • Version disponible du coté du moteur Oracle.

Ce type pourra être utilisé dans la déclaration de variables PL/SQL Page 201 Copyright G. Code_Postal NUMBER(5). • 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 : – .12. Mopolo-Moké Oracle et le modèle Objet Relationnel . Rue VARCHAR2(20). 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.

des TYPES TABLES ou des VARRAY Page 202 Copyright G. … ). des Types RECORD. TYPE nomType IS TABLE OF typeDesElements . Il sera possible de définir des "Types Tables". TYPE nomType IS RECORD (déclarationDesChamps. NCHAR. des Types VARRAY et des Types REF CURSOR – Les différentes Syntaxes TYPE nomType IS VARRAY(limit) OF typeDesElements. 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. NVARCHAR2. Mopolo-Moké Oracle et le modèle Objet Relationnel .12. TYPE nomType REF CURSOR OF typeDesElements . des REF CURSOR. types objets contenant des types tables ou des VARRAY. – Les éléments d' VARRAY ou d' Type table peuvent un un pas être : BOOLEAN.

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

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

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

12. 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). avion9_set_t) NESTED TABLE avions9 STORE AS storeAvions9. Mopolo-Moké Oracle et le modèle Objet Relationnel . Page 206 Copyright G.

avion9_t(1. avion9_t(1. INSERT INTO hangar9 values (1. . Mopolo-Moké Oracle et le modèle Objet Relationnel . . Paris'200)). avion9_set_t(avion9_t(1. ' . Nice' INSERT INTO hangar9 VALUES(2. ' A320'' . ' Caravelle' . 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. BEGIN tabav9 := avion9_set_t( avion9_t(1. ' A300'' . . / Page 207 Copyright G. tabav9). Paris'100). ' Concorde'' .12. ' Paris'250). . A300'' . avion9_t(2. END. 300))). Berlin'300).

Page 208 Copyright G. 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. Il a un accès contrôlé grâce aux objets LIBRARY.12. • Ce code L3G s' exécute dans un espace d' adressage séparé. Mopolo-Moké Oracle et le modèle Objet Relationnel .

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

• Les LOBs. • Les Librairies et fonctions spécifiques. il apparaît des types objets dans une table. Les objets manipulés lors des import/export sont les suivants : • Les ADTs et références d’ ADT. • Les DIRECTORIES. Si lors d’un import/export. 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. I I Page 210 Copyright G. • Les Nested Tables. • Les Tableaux (ARRAY et VARRAY) .13. elle sera considérée comme orientée objet.

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.

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

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

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.4 Les Imports I OID et Import • L’import préserve les OID des Types . Mopolo-Moké Oracle et le modèle Objet Relationnel .

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

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.

Mopolo-Moké Oracle et le modèle Objet Relationnel . Humaines. Ventes. Planton. de département doit être entre 1000 et 9999 Nom du département {Recherche. Resources.15. 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. 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. Marketing. Directeur. PDG} Salaire entre 1500 et 15000 CV Date de Naissance Date embauche : doit être supérieure Date_Naiss Nr. 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.

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

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

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

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. Mopolo-Moké Oracle et le modèle Objet Relationnel . Exercices I Création des tables • Créer les tables EMPLOYE_O.15.

Peut .il être unique ? Page 227 Copyright G.15. 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.

‘Finance’ ou ‘Ressources Humaines’ • Supprimer un DEPT Page 228 Copyright G. Exercices I Insertion des objets • Insérer 2 ou 3 objets dans chacune des tables créées précédemment.15. Mopolo-Moké Oracle et le modèle Objet Relationnel . 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’ .

Exercices I Consultation des objets • Faire un Listing des DEPTs triés par nom • Pour un DEPT donné. Mopolo-Moké Oracle et le modèle Objet Relationnel .15. 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.

Exercices I Les vues • créer une table relationnelle (non objet) DEPT_r. Le type objet associé doit s' appeler old_DEPT_t. delete. select) via la vue Page 230 Copyright G. 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. 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. update.15. Mopolo-Moké Oracle et le modèle Objet Relationnel .

You're Reading a Free Preview

Télécharger
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->