BDOO Ch1 Type Table Objet

67
 Programmation objet avec Oracle Chapitre I: Type, tables et objets Abderrafiaa ELKALAY FSTG Marrakech IRISI 3

Transcript of BDOO Ch1 Type Table Objet

Page 1: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 1/67

 

Programmation

objet avec Oracle 

Chapitre I: Type, tables et objets 

Abderrafiaa ELKALAY

FSTG Marrakech

IRISI 3

Page 2: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 2/67

 

Programmation objet avec Oracle 2

Objectifs du chapitre

A la fin de ce chapitre, vous pourrez :

décrire la finalité d’une table objet 

Créer un type objet

Créer une table objet

Manipuler une table objet

Page 3: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 3/67

 

I.1 Introduction

• Ce chapitre présente, dans un premier temps , les caractéristiquesdu modèle objet-relationnel (extension objet du modèlerelationnel)

• Dans un second temps nous verrons quelques nouvelles options deSQL et de PLSQL. Les autres chapitres sont consacrés à auxnouvelles spécificités objet.

• Oracle utilise le terme « object » (tout en utilisant le terme object-relationnal)

Programmation objet avec Oracle 3

Page 4: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 4/67

 

Programmation objet avec Oracle 4

I.1 Introduction

• Le concept table existe toujours dans le modèle relationnel objet,mais il est étendu. En effet, la structure d’une table objet-relationnelle sera définie à l’aide du type. 

•  Chaque enregistrement d’une table objet-relationnelle peut êtreassimilé à un objet.

• L’objet sera doté d’un OID(object identifier) unique 

Page 5: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 5/67

 

I.1 Introduction

Cette extension objet met en œuvre différentes mécanismes: 

Les collections : elles regroupent un ensemble d’éléments dumême type. Le terme collection est un terme générique quienglobe les listes, les vecteurs et les tableaux

Les références : C’est un pointeur vers un objet ligne. L’identité desobjets est définit par l’utilisation de références (pointeurs) 

L’ héritage: chaque type peut permettre de définir plusieurs sous-types

L’encapsulation par le programmation de modèles (procédures oufonctions)

Programmation objet avec Oracle 5

Page 6: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 6/67

 

I.2 Type objet

Cette section et les suivantes décrivent les aspects objets

relationnels d’Oracle 

I.2.1 Types de données

• Les types scalaires conviennent à la majorité des applications

traditionnelles basées sur les tables relationnels.

• Les types permettant de construire les objets se trouvent dans lacatégorie des types personnalisés

Programmation objet avec Oracle 6

Page 7: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 7/67

Programmation objet avec Oracle 7

I.2 Type objet

I.2.2 Persistance

Trois catégories existent sous oracle:

• Les objets colonnes(column objects) sont stockés en tant quecolonne structurés dans une table relationnelle

• Les objets lignes (row objects) qui sont stockés en tant que lignesd’une table objet. Ils possèdent un identificateur unique appeléOID (Object IDentifier)

• Et les objets non persistants qui ne sont ni stockés dans unecolonne de table relationnelle, ni dans une ligne de table objet. Ilsn’ existent que durant l’ exécution d’un programme PL/SQL (Bloc,procédure cataloguée ou déclencheur)

 

Page 8: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 8/67

I.2 Type objet

Un type d’oracle peut être utilisé: 

 – Pour la construction d’autres types 

 – Pour définir des tables objet (Object table)

 – Pour définir une colonne d’une table relationnelle 

 – Pour la construction de vues objet (object views)

Programmation objet avec Oracle 8

 

Page 9: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 9/67

Programmation objet avec Oracle 9

I.2 Type objet

Type de donnée

Personnalisés (Type) Intégrés

ScalairesCHAR(n) – NCHAR(n)

 VARCHAR2(n) – NVARCHAR2(n)NUMBER(n , p) - DECIMALDATEBFILE - BLOB - CLOB - NCLOBLONG - LONG - RAW - RAW(n) -ROWID

Collections

VARRAY

TABLE

Références

REF

 

Page 10: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 10/67

Programmation objet avec Oracle 10

I.2 Type objet

I.2.3 Création d’un type 

La commande CREATE TYPE comporte trois parties:

• La première partie qui déclare la structure du type (chapitre 3 et

4)

• La deuxième qui déclare les méthodes (chapitre 5)

• La troisième qui positionne des types dans une hiérarchie d’

héritage (chapitre 2 )

 

Page 11: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 11/67

I.2 Type objet

Programmation objet avec Oracle

colonne1 type1, colonne2 type2,…, 

Methode1(parametres 1), Methode2(…),… 

[[NOT] INSTANTIABLE][[NOT] FINAL]

11

Structure

Comportement

 

CREATE[OR REPLACE] TYPE shema [AS OBJECT | UNDER shema.nomsurType]

(

)

Relatif à l’héritage 

 / 

 

Page 12: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 12/67

I.2 Type objet

• OR REPLACE permet de recréer le type s’il existe déjà sans avoir à

les détruire (il faut qu’aucun type n’y soit rattaché) 

• AS OBJECT permet de définir un type racine d’une hiérarchie

d’héritage (si aucune hiérarchie d’héritage n’est à définir, chaque

type est une racine)

• UNDER désigne le sur type

Programmation objet avec Oracle 12

 

Page 13: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 13/67

Programmation objet avec Oracle 13

I.2 Type objet

L’exemple suivant décrit le type Pilote_type composé de 4

colonnes au premier niveau.

Les colonnes etat_civil_t et adresse_t sont appelées types composants 

Brevet Etat_civil_t Adresse_t pays

nom datnais Nrue Rue ville

Pilote_type

 

Page 14: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 14/67

I.2 Type objet• Le code de création est le suivant:

CREATE OR REPLACE TYPE etat_civil_type AS OBJECT(nom VARCHAR(30), datenais DATE);

/

CREATE OR REPLACE TYPE adresse_type AS OBJECT (nrue NUMBER(3), rue VARCHAR(40),ville VARCHAR(30));

/

CREATE OR REPLACE TYPE Pilote_type AS OBJECT (brevet CHAR(6), etat_civil_tetat_civil_type, adresse_t adresse_type, pays NUMBER(6,2));

/

• Le caractère / termine une création

Programmation objet avec Oracle 14

 

Page 15: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 15/67

I.2 Type objet

• DESC Pilote_type donne les colonnes au premier niveau

SQL > DESC Pilote_type

NOM NULL? TYPE

BREVET

ETAT_CIVIL_T ETAT_CIVIL_TYPE

ADRESSE_T ADRESSE_TYPEPAYE NUMBER(6,2)

Programmation objet avec Oracle 15

 

Page 16: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 16/67

Programmation objet avec Oracle 16

I.2 Type objet

I.2.4 Restrictions• Lors de la création d’un type il n’est pas possible de définir des

colonnes BOOLEAN,ROWID,LONG, LONG RAW ou utiliser %type

• Pour l’instant il n’est pas possible de définir dynamiquement des

types dans PL/SQL. En revanche, il est possible de manipuler des

variables typées dans PL/SQL

• Il n’est pas possible d’utiliser un lien de base de donnée (database

link) pour interroger, insérer ou mettre à jour une table distante

dépendant ou contenant un type

 

Page 17: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 17/67

Programmation objet avec Oracle 17

I.2 Type objet

I.2.5 Dictionnaire des données

• Des nouvelles vues du dictionnaires des données ont été définiespour prendre en compte les types

• Nous présentons ici certains vues qui s’appliquent à tout schéma

courant sont préfixé par USER_ –   Les vues qui s’appliquent à tout le schéma sont préfixé par DBA_ 

 –   Les vues qui s’appliquent à un schéma courant en incluant leséléments hérités par prérogatives sont préfixé par ALL_

 

Page 18: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 18/67

I.2 Type objet

Nous citerons: – USER_COLL_TYPE décrit les collections

 – USER_INDEXTYPES décrit les index sur les types

 – USER_TYPES décrit les types

 – USER_TYPES_ATTRS décrit les attributs des types

 – USER_TYPES_METHODS décrit les méthodes des types

 – USER_TYPES_VERSIONS décrit les versions des types

Exemples exécuter les instructions suivantes sous SQL+

SQL> desc USER_TYPES

SQL> select * FROM USER_TYPES

SQL> desc USER_TYPES_ATTRSSQL> select * FROM USER_TYPES_ATTRS

Programmation objet avec Oracle 18

 

Page 19: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 19/67

Programmation objet avec Oracle 19

I.2 Type objet

I.2.6 Instanciation

• La directive NEW permet d’instancier les objets non persistants.Cette méthode invoque un constructeur portant le même nom (voirchapitre 5).

• Le code PL/SQL suivant instancie l’objet nonPersistant. La directive

d’instanciation s ’appelle le constructeur du type par defaut. Notezaussi l’utilisation des constructeurs par défaut des types composants(ici etat_civil_type et adresse_type)

DECLARE

nonPersistant Pilote_type;

BEGUINnonPersistant := NEW Pilote_type(‘PL-11’ ,

etat_civil_type(‘Diffis’,’05-02-1970’), 

adresse_type(1,’ G.Brassens’ ,’Blagnac’),3500); 

 

Page 20: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 20/67

I.2 Type objet

• Nous allons exécuter le code PLSQL suivant et le commenter

• Mais tout d’abord faisons un DESC Pilote_type 

DECLARE

p1 Pilote_type;

BEGIN

p1 := NEW Pilote_type('PL-11',

etat_civil_type('Diffis','05-02-1970'),

adresse_type(1,'G. Brassens','Blagnac'),3500) ;

p1.brevet := 'PL-12';

p1.adresse_t.rue := 'Camparols';

DBMS_OUTPUT.PUT_LINE('Pilote1 : brevet et rue : '||p1.brevet||''||p1.adresse_t.rue);

END;

/

Programmation objet avec Oracle 20

 

Page 21: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 21/67

Programmation objet avec Oracle21

I.2 Type objet

I.2.7 Suppression d’ un type 

• La commande DROP détruit un type:

DROP TYPE nom_du_type [FORCE|VALITE]

 – FORCE permet de forcer la suppression même si des objets sont

rattachés au type. Dans ce cas les objets du type deviennent

inaccessible mais ne disparaissent pas.

 – VALITE s’applique seulement aux sous types (types qui héritent du

type à détruire), déclenche une vérification pour chaque objet dutype détruit

 

Page 22: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 22/67

I.2 Type objet

L’ordre à respecter pour la destruction du type pilote_type est : 

 – DROP TYPE Pilote_type;

 – DROP TYPE adresse_type;

 – DROP TYPE etat_civil_type;

Programmation objet avec Oracle 22

 

Page 23: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 23/67

Programmation objet avec Oracle 23

I.3 Table relationnelle

Avant de se consacrer au monde des tables étudions lemécanisme permettant d’utiliser des types au sein de table relationnelles

I.3.1 Syntaxe

La syntaxe simplifiée pour la création d’une table relationnelle: 

CREATE [GLOBAL TEMPORARY] TABLE [schema] nomTableRelationnelle

( colonne typeDonnées [DAFAUL expression]*contrainteEnLigne …+ | contrainteHorsLigne …- 

[,colonnes typeDonnées] )[ON COMMIT{ DELETE |PRESERVE} ROWS];

 

Page 24: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 24/67

I.3 Table relationnelle

Les options sont les suivantes:

• GLOBAL TEMPORARY

 – Indique que la table est temporaire. Les données sont

visibles seulement par les sessions qui insère des données danscette table

 – La structure de ces tables persistent de la même manière queles tables permanentes.

 – En revanche, la persistance des données peut être programméesoit par session soit par transaction à l’aide de l’option ONCOMMIT.

Programmation objet avec Oracle 24

 

Page 25: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 25/67

I.3 Table relationnelle

• TypeDonnées

 – Indique un type scalaire (CHAR,DATE…) 

• contrainteEnLigne – désigne une contrainte en ligne traditionnellement définie en même

temps que la colonne (in line constraint )

[CONSTRAINT nomContrainte]{ [NOT] | NULL | UNIQUE | PRIMARY KEY |

REFERENCES *schema.+ nomTable | nomVue- *(col1*, col2+…)+ 

[ON DELETTE {CASACADE | SET NULL}]

| CHECK (condition)

}

Programmation objet avec Oracle 25

 

Page 26: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 26/67

I.3 Table relationnelle

• contrainteRefEnLigne – désigne une contrainte de référence (in line ref-constraint ), étudiée

plus en détail au chapitre 3

• contrainteHorsLigne – désigne une contrainte hors ligne traditionnelle (out of line constraint ),

étudiée plus en détail au chapitre 3

• contrainteRefHorsLigne – désigne une contrainte de reference hors ligne (out of line ref-

constraint ), étudiée plus en détail au chapitre 3

Programmation objet avec Oracle 26

 

Page 27: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 27/67

I.3 Table relationnelle

• ON COMMIT – Est valable seulement pour les tables temporaires.

 – Cette option si les données doivent persister pendant la durée de latransaction ou pendant la durée de la session

 – DELETTE ROWS (option par défaut): les données n’existent que pendantla transaction et sont détruites à chaque validation par COMMIT

 – PRESERVE ROWS : indique que les données persistent durant toute la

session, indépendamment des transactions. A la fin de la session ellessont détruites.

Programmation objet avec Oracle 27

 

Page 28: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 28/67

I.3 Table relationnelle

I.3.2 Objet colonne

• Les deux dernières colonnes de la table relationnelle suivante sondéfinies à l’aide du type pilote_type 

DROP TABLE Vols;

CREATE TABLE Vols

(numero NUMBER, dateVol DATE,nombrePax NUMBER(3), departVARCHAR(30), arrivee VARCHAR(30),

CDB_t Pilote_type, COPI_t Pilote_type,

CONSTRAINT pk_Vols PRIMARY KEY(numero));

• Excuter la commande desc

DESC vols;

Programmation objet avec Oracle 28

 

Page 29: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 29/67

Programmation objet avec Oracle 29

I.3 Type relationnel

Instanciation

• L’ajout d’un vol à la table vols nécessite l’utilisation de deux 

constructeurs Pilote_type

INSERT INTO VolsVALUES (1, SYSDATE, 120, 'Orly-Ouest', 'Blagnac',

Pilote_type('PL-11',etat_civil_type('Diffis','05-02-1970'),

adresse_type(1,'G. Brassens','Blagnac'),3500) ,

Pilote_type('CPL-10',etat_civil_type('Mercier','05-12-1947'),

adresse_type(5,'Boeldieu','Toulouse'),5600) );

 

Page 30: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 30/67

I.3 Type relationnel

Extraction

• Affichons les caractéristiques du vol avec le nom du

commandant de bord.

• La requête utilise un alias et la notation pointée pour accéder à

des colonnes terminales des objets colonne.

SELECT v.numero, v.datevol, v.nombrePax, v.depart, v.arrivee,

v.cdb_t.etat_civil_t.nom

FROM Vols v ;

Programmation objet avec Oracle 30

 

Page 31: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 31/67

Programmation objet avec Oracle 31

I.3 Type relationnel

Valeurs par défaut

• La directive DEFAULT permet d’initialiser les objets colonne 

CREATE TABLE Vols

(numero NUMBER, dateVol DATE,nombrePax NUMBER(3), departVARCHAR(30), arrivee VARCHAR(30),

CDB_t Pilote_type DEFAULT Pilote_type

('PL-1', etat_civil_type('Sigaudes','10-06-1960'),

adresse_type(12,'Lasbordes','Balma'), 3500),

COPI_t Pilote_type DEFAULT Pilote_type

('PL-2', etat_civil_type('Soutou','05-02-1965'),

adresse_type(7,'Camparols','Blagnac'), 3000),

CONSTRAINT pk_Vols PRIMARY KEY(numero));

 

Page 32: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 32/67

I.3 Type relationnel•

Lors d’insertion d’ enregistrement dans la table et s’il n’est pas faitmention de l’ équipage, les objets colonne CDB_t et COPI_t serontinitialisées aux valeurs par défaut

• Exemple: l’insertion suivante fait appel aux valeurs par default pources colonnes

INSERT INTO Vols (numero, dateVol, nombrePax, depart, arrivee)

VALUES (2, SYSDATE, 200, 'Nice', 'Biarritz');

Vérifier le par:

SELECT v.numero, v.depart, v.arrivee, v.cdb_t.etat_civil_t.nom,v.copi_t.etat_civil_t.nom

FROM Vols v;

Programmation objet avec Oracle 32

 

Page 33: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 33/67

I.3 Type objet

Quoi de plus naturel que de stocker des objetsdans des tables.

• Pour répondre à ce besoin oracles à étendu la

notion de tables relationnelle à la table objet.

• La directive OF dans l’instruction CREATE TABLE

permet de spécifier le type qui décrira les objetsstockés dans la table objet

Programmation objet avec Oracle 33

 

Page 34: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 34/67

I.3 Type objet

• Une table qui dépend d’un type (CREATE TABLE

nomTableObjet OF nomType) est une table objet.

• Chaque enregistrement est un objet ligne (row object)

.

• A ce titre chaque objet ligne est muni d’un unique OID

(Object IDentifier)

Programmation objet avec Oracle 34

 

Page 35: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 35/67

I.3 Type objet

I.4.1 Syntaxe 

• La syntaxe simplifié est la suivante (nous verrons une

définition plus complètes lors des prochains chapitres):

Programmation objet avec Oracle 35

 

Page 36: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 36/67

I.3 Type objet

CREATE [GLOBAL TEMPORARY] TABLE [schema.]

nomTableObjet OF [schema.] nomType[( colonne [DAFAUL expression]

*contrainteEnLigne …+ 

| contrainteHorsLigne …- [,colonnes typeDonnées] )

[ON COMMIT{ DELETE |PRESERVE} ROWS];

[OBJECT IDENTIER IS {SYSTEM GENRATED} PRIMARY KEY]*OIDINDEX *index+…+ 

Programmation objet avec Oracle 36

 

Page 37: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 37/67

I.3 Type objet

• Les options pour la Table relationnelle déjà présentées

sont aussi applicables aux tables objet.• Les spécificités objet sont les suivantes:

 – OBJECT IDENTIER IS: indique la méthode de génération des

OID pour les enregistrements de la table (voir chapitre 9,

stockage des objets). Cette spécificité contient deux options:

Programmation objet avec Oracle 37

 

Page 38: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 38/67

I.3 Type objet

SYSTEM GENRATED est l’option par défaut. Elle précise que l’OID estgénéré automatiquement par le système (sur 16 octets)

• PRIMARY KEY précise que l’OID est basé sur la valeur de la clé

primaire. Sa taille dépend de la taille de cette clé primaire.

 – OIDINDEX : cette option est disponible si la table génère

automatiquement ses OID. Elle permet de déclarer un index

sur la colonne OID

Programmation objet avec Oracle 38

 

Page 39: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 39/67

Programmation objet avec Oracle 39

I.4 Table objet

I.4.2 Contrainte

• Dans notre exemple, nous allons déclarer la table objet Pilote de type

pilote_type avec des contraintes puis nous stockerons et manipulerons

les objets dans cette table.

• Un type ne peut pas contenir les contraintes (NOT NULL, CHECK, etc).

Elles sont déclarées au niveau de la table objet.

 

Page 40: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 40/67

I.4 Table objetTable objet Pilote de Pilote_type

Programmation objet avec Oracle 40

brevet etat_civil Adresse_t paye

nom datenais nrue rue ville

OID1 PL-11 LACOMBE 05/02/1970 1 G.Brassens Blagnac 3500

OID2 CPL-2 LAROCHE 15/12/1963 2 Foch Montauban

2600

OID3 CPL- 3 LABAT 25/12/1965 3 Camparol Pau 300

 

Page 41: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 41/67

I.4 Table objet• La syntaxe suivante définit une table objet avec ses contraintes:

 – La contrainte PRIMARY KEY déclare la clé primaire

 – La contrainte CHECK imposent des domaines de valeurs

 – La contrainte UNIQUE empêche les doublons

Notons qu’il aussi possible d’ajouter, de supprimer , de désactiver ou deréactiver des contraintes sur des tables objets à l’aide de la commande

ALTER TABLE de la même manière que pour les tables relationnelles.

Programmation objet avec Oracle 41

 

Page 42: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 42/67

I.4 Table objetCREATE TABLE Pilote OF Pilote_type

(CONSTRAINT pk_Pilote PRIMARY KEY(brevet),

CONSTRAINT df_paye paye DEFAULT 3000,

CONSTRAINT nn_paye CHECK (paye IS NOT NULL),

CONSTRAINT ck_paye CHECK (paye BETWEEN 2000 AND 5000),

CONSTRAINT nn_nom CHECK (etat_civil_t.nom IS NOT NULL),

CONSTRAINT un_nom UNIQUE (etat_civil_t.nom)

);

Programmation objet avec Oracle 42

 

Page 43: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 43/67

I.4 Table objet

I.4.3 Dictionnaire de donnée

Les vues du dictionnaires de données USER_OBJECT_TABLES et

ALL_OBJECT_TABLES décrivent les tables objets

Exécuter

SQL> SELECT TABLE_NAME, OBJECT_ID_TYPE,

TABLE_TYPE_OWNER, TABLE_TYPE

FROM USER_OBJECT_TABLES;

Programmation objet avec Oracle 43

 

Page 44: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 44/67

Programmation objet avec Oracle 44

I.4 Table objetI.4.4 Instanciation

Ce paragraphe traite des objets ligne (row object) qui sont des objets

stockés en tant que ligne d’une table objet (dont les valeurs occupent

toutes les colonnes).

•Ces objets sont instanciés à l’aide de la commande INSERT appliqués àune table objet

• Les objets colonne sont les objets qui n’occupent pas tous les champs

de la table

• La différence entre ligne et colonne est que la ligne possède un OID

alors que la colonne non

 

Page 45: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 45/67

I.4 Table objetExemple: le script SQL suivants insere 3 objets

INSERT INTO Pilote VALUES (Pilote_type('PL-11',

etat_civil_type('Lacombe','05-02-1970'),

adresse_type(1,'G. Brassens','Blagnac'),3500));

INSERT INTO Pilote VALUES (Pilote_type('CPL-2',etat_civil_type('Laroche','15-12-1963'),

adresse_type(2,'Foch','Montauban'),2600);

INSERT INTO Pilote VALUES ('CPL-3',

etat_civil_type('Labat','25-12-1965'),

adresse_type(3,'Camparols','Pau'),3000);

Programmation objet avec Oracle 45

 

Page 46: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 46/67

Programmation objet avec Oracle 46

I.4 Table objet

I.4.5 A propos des OID

• Dans un environnement centralisé (quand les tables objet ne sont pas

réparties ),Il est préférable d’utiliser la clé primaire comme OID.

• Le chapitre détaille la composition et l’utilisation des OID: 

 

Page 47: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 47/67

I.4 Table objet

OID basés sur la clé primaire

• Pour que les OID doivent être basés sur la clé primaire de la table, il

faut opter pour l’option PRIMARY KEY comme le montre l’instruction

suivante:

CREATE TABLE Pilote OF Pilote_type

(CONSTRAINT pk_Pilote PRIMARY KEY(brevet),

Autrescontraintes…) 

OBJET IDENTIFIER IS PRIMARY KEY;

Programmation objet avec Oracle 47

 

Page 48: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 48/67

I.4 Table objet• La colonne OBJECT_ID_TYPE de la vue USER_OBJECT_TABLES permet

de retrouver la méthode de génération de l’OID: 

Exécuter

SQL> SELECT TABLE_NAME, OBJECT_ID_TYPE, TABLE_TYPEFROM USER_OBJECT_TABLES;

Programmation objet avec Oracle 48

 

Page 49: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 49/67

I.4 Table objet

Index sur OID

• Si un index doit être declaré sur un OID de la meme table objet, il faut

opter pour l’option OIDINDEX comme le montre l’exemple suivant: 

CREATE TABLE Pilote OF Pilote_type

(CONSTRAINT pk_Pilote PRIMARY KEY(brevet),

OBJECT IDENTIFIER IS SYSTEM GENERATED

OIDINDEX index_OID_Pilote

(STORAGE (INITIAL 100K NEXT 50K MINEXTENTS 1

MAXEXTENTS 50 PCTINCREASE 5));

Programmation objet avec Oracle 49

 

Page 50: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 50/67

I.4 Table objetVisualisation

• Le chapitre 3 décrit l’ instruction SELECT pour construire des requêtes

de visualisation

• La directive REF permet d’ extraire une reference. 

• La requête suivante extrait les OID des objets de la table Pilote:

SQL>SELECT REF(p), p.brevet, p.etat_civil_t.nom FROM Pilote p;

Programmation objet avec Oracle 50

 

Page 51: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 51/67

Programmation objet avec Oracle 51

I.4 Table objetI.4.6 Manipulation des objets

• On modifie par la commande UPDATE et on supprime par la

commande DELETE.

• Dans les deux cas on doit utiliser un alias afin de parcourir lesstructures de données à plusieurs niveaux

• Exemple : écrire un script pour modifier le nom et la paye du premier

pilote, et pour supprimer aussi les pilotes ne résidant pas à Blagnac

 

Page 52: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 52/67

I.4 Table objetSQL> UPDATE Pilote p

SET p.etat_civil_t.nom = 'Sigaudes', p.paye=3700

WHERE brevet = 'PL-11';

--

SQL> DELETE FROM Pilote p

WHERE NOT (p.adresse_t.ville = 'Blagnac');

Programmation objet avec Oracle 52

 

Page 53: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 53/67

Programmation objet avec Oracle 53

I.4 Table objetChargement d’un objet (VALUE) 

• La fonction SQL VALUE (alias) renvoie un contenue sous la forme d’un

type

• La requete suivante extrait un objet chargé à partir de la table pilote.Ce résultat est différent de la deuxième extraction ( l’utilisation de )

qui ne construit qu’un ensemble de valeur: 

SQL> SELECT VALUE(ap) FROM Pilote ap

WHERE ap.brevet = 'PL-11';

SQL> SELECT * FROM Pilote WHERE brevet = 'PL-11';

 

Page 54: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 54/67

Programmation objet avec Oracle 54

I.4 Table objet• Le bloc PL/SQL suivant charge les données dans un objet non persistant

(variable var_pilote)

•  L’ objet non persistant doit etre manipulé par la notation pointée. 

DECLARE

var_pilote Pilote_type;

BEGIN

SELECT VALUE(ap) INTO var_pilote FROM Pilote ap

WHERE ap.brevet = 'PL-11';

IF (var_pilote.etat_civil_t.nom = 'Sigaudes') THEN

DBMS_OUTPUT.PUT_LINE('Sigaudes est trouvé! sa paye : ' ||TO_CHAR(var_pilote.paye));

END IF;

END;

/

 

Page 55: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 55/67

I.4 Table objetDirective %TYPE

• La directive SQL%TYPE s’ applique à une colonne d’une table . Elle est

utilisée pour déclarer une variable dans PL/SQL

DECLARE

varBrevet Pilote.brevet%TYPE;

varRue Pilote.adresse_t.rue%TYPE;varNom Pilote.etat_civil_t.nom%TYPE;

BEGIN

varBrevet := 'PL-5';

varRue := 'Port-Royal';

varNom := 'Bidal';

END;

/

Programmation objet avec Oracle 55

 

Page 56: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 56/67

Programmation objet avec Oracle 56

I.4 Table objetI.4.7 Valeurs NULL

• Un objet non persistant, un objet colonne , une collection un élément

d’une collection peut être explicitement initialisé à NULL (implicitement

s’il n’ a pas été initialisé) 

• Un Objet ligne ne peut être pas initialisé à NULL

• Un objet initialisé à NULL (est dit atomically null) est différent du même

objet ayant toutes ses colonnes vide. Le premier est dit objet vide. Le

second est dit objet nul

 

Page 57: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 57/67

I.4 Table objetObjets non persistants

• Dans le bloc suivant, l’objet colonne adresse de l’objet non persistant

p1 est nul (tous ses champs valent null). La mise à jours de l’adresse p1

est possible

• L’objet colonne adresse de l’objet non persistant p2 est vide. La mise à

 jours de l’adresse p2 n’est pas possible 

DECLARE

p1 Pilote_type;

p2 Pilote_type;

BEGIN

p1 := NEW Pilote_type('PL-1‘,etat_civil_type(‘Bidal',‘16-01-1965') ,

adresse_type(NULL, NULL, NULL),3000) ;p2 := NEW Pilote_type('PL-1‘, etat_civil_type(‘Bidal',‘16-01-1965'), NULL,3000) ;

END;

/

Programmation objet avec Oracle 57

 

I 4 T bl bj

Page 58: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 58/67

Programmation objet avec Oracle 58

I.4 Table objet

Objets colonne

Comme le montre l ’exemple suivant la modification de la colonne adressedu premier cas est possible.

• Dans le second cas ca ne sera pas possible.

• En effet on ne peu pas accéder à un objet vide.

INSERT INTO Pilote

VALUES ( 'PL-1‘,etat_civil_type(‘Bidal',‘16-01-1965') ,

adresse_type(NULL, NULL, NULL),3000) ;

INSERT INTO Pilote

VALUES ('PL-1‘, etat_civil_type(‘Bidal',‘16-01-1965'), NULL,3000);

 

Page 59: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 59/67

I.4 Table objetI.4.8 INDEX

• Comme pour les tables relationnelles, on peut créer un index pour

une table Objet

• Nous verrons qu’on peut indexer des collections (voir chap 4 et 9) 

-- table relationnelle VolsCREATE INDEX idx_r_nomPilote

ON Vols (CDB_t.etat_civil_t.nom);

-- table objet Pilote

CREATE INDEX idx_o_villePilote

ON Pilote (adresse_t.ville);

Programmation objet avec Oracle 59

 

Page 60: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 60/67

Programmation objet avec Oracle 60

I.4 Table objetI.4.9 Déclencheurs (Triggers)

• Il est possible de définir un ou plusieurs déclencheurs sur une table objet

• Nous étudierons par ailleurs un nouveau type de déclencheurs (INSTEAD OF)

qui permettent la mise à jour de vue multi tables (voir chapitre 8)

• L’exemple suivant décrit un déclencheur programmé sur la table objet PILOTE.

Ce déclencheur insère un enregistrement dans la table trace à chaque

nouveau pilote domicilié à Blagnac et né le 05-02-1965 ou le 16-01-1965

• La condition WHEN filtre les objets et évite ainsi de tester la condition sur la

ville (instruction IF dans le corps du déclencheur)

• L’ accès aux valeurs d’un nouvel objet dans le corps du déclencheur ou dans

la condition est noté par la directive NEW

 

Page 61: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 61/67

I.4 Table objetCREATE TABLE Trace (ligne VARCHAR(80));

CREATE TRIGGER trig_o_Pilote1

AFTER INSERT ON Pilote FOR EACH ROW

WHEN ( NEW.adresse_t.ville = 'Blagnac' )

BEGIN

IF ( :NEW.etat_civil_t.datenais = '05-02-1965' OR

:NEW.etat_civil_t.datenais = '16-01-1965') THEN

INSERT INTO trace VALUES ('Pilote : '|| :NEW.brevet

|| ' est de Blagnac et son anniversaire concorde...');

END IF;

END;

/

Programmation objet avec Oracle 61

 

Page 62: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 62/67

I.4 Table objetCREATE TABLE Trace (ligne VARCHAR(80));

CREATE TRIGGER trig_o_Pilote1

AFTER INSERT ON Pilote FOR EACH ROW

WHEN ( NEW.adresse_t.ville = 'Blagnac' )

BEGIN

IF ( :NEW.etat_civil_t.datenais = '05-02-1965' OR

:NEW.etat_civil_t.datenais = '16-01-1965') THEN

INSERT INTO trace VALUES ('Pilote : '|| :NEW.brevet

|| ' est de Blagnac et son anniversaire concorde...');

END IF;

END;

/

Programmation objet avec Oracle 62

 

Page 63: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 63/67

I.4 Table objet• Le code suivant instancie un objet de la table objet PILOTE qui

déclenche une insertion dans la table trace

SELECT * FROM Trace;

INSERT INTO Pilote

VALUES ('CPL-4',etat_civil_type('Sery','16-01-1965'),adresse_type(3,'Hoche','Blagnac'),3400);

SELECT * FROM Trace;

Programmation objet avec Oracle 63

 

Page 64: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 64/67

Programmation objet avec Oracle 64

I.4 Table objet

I.4.10 Extraction d’objets 

• Toutes les fonctionnalités relationnelles de l’ instruction SELECT sont

applicables aux tables objets.

• Ainsi, il est possible d’utiliser les directives suivantes : DISTINCT ,

ORDER BY, GROUP BY,MINUS,UNION.

• Les chapitres 3,4 et 6 décrivent les spécificités de l’ instruction SELECT

pour manipuler les références, les collections et les méthodes.

 

Page 65: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 65/67

I.4 Table objet

Eléments de la clause FROM

• Depuis la version 8 (1997), la clause FROM d’une requête peut contenir

une instruction SELECT.

• Considérons la table Pilote, la requête suivante fournit la répartition enpourcentage des pilotes par compagnie:

SELECT aliasCompa.compagnie,aliasCompa.nbPil/aliasPil.total*100 "%Pilotes"

FROM (SELECT compagnie, COUNT(*) nbPil

FROM Pilote GROUP BY compagnie) aliasCompa,

(SELECT COUNT(*) total FROM Pilote) aliasPil;

Programmation objet avec Oracle 65

 

Page 66: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 66/67

I.4 Table objet

I.4.11Supression d’une table objet 

• La suppression d’une table objet par la commande DROP TABLE

entraine la suppression des objets stockés, des privilèges, des index

• Si vous voulez seulement supprimer les objets d’une table et éviter tous

ces effets de bord, vous pouvez utiliser la commande TRUNCATE TABLE.• Attention, il n’est pas possible d’annuler un ordre DROP TABLE par

ROLLBACK

Programmation objet avec Oracle 66

 

Page 67: BDOO Ch1 Type Table Objet

5/17/2018 BDOO Ch1 Type Table Objet - slidepdf.com

http://slidepdf.com/reader/full/bdoo-ch1-type-table-objet-55b07ccfb6518 67/67

I.4 Table objet• Pour détruire un schéma entier, il faut commencer par supprimer les

tables objet puis les types associés et pas l’inverse, on doit d’abord les

supprimer les tables puis les types associés:

DROP TABLE Pilote;

DROP TYPE Pilote_type;DROP TYPE adresse_type;

DROP TYPE etat_civil_type