bdoo ch1 type table objet
TRANSCRIPT
![Page 1: BDOO Ch1 Type Table Objet](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/1.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/2.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/3.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/4.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/5.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/6.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/7.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/8.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/9.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/10.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/11.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/12.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/13.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/14.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/15.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/16.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/17.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/18.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/19.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/20.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/21.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/22.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/23.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/24.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/25.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/26.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/27.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/28.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/29.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/30.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/31.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/32.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/33.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/34.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/35.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/36.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/37.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/38.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/39.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/40.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/41.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/42.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/43.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/44.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/45.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/46.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/47.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/48.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/49.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/50.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/51.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/52.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/53.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/54.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/55.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/56.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/57.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/58.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/59.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/60.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/61.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/62.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/63.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/64.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/65.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/66.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022020718/557200fa4979599169a079af/html5/thumbnails/67.jpg)
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