BDOO Ch1 Type Table Objet
-
Upload
mounir-quatra -
Category
Documents
-
view
117 -
download
0
Transcript of 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
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
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
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
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
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
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)
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
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
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 )
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
/
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
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
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
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
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
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_
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
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);
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
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
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
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];
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
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
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
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
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
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) );
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
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));
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
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
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
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
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
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
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
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.
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
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
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
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
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
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
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:
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
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
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
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
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
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
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';
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;
/
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
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
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
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);
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
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
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
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
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
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.
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
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
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