Vous êtes sur la page 1sur 10

Système de Gestion de Base de

Données

Les extensions objet-relationnel d’Oracle

Introduction

!  Les types objets constituent une manière d’étendre le système de type de


données relationnels d’Oracle.

!  Dans oracle, il existe des types de base comme les caractères, les nombres et
les dates.

!  Les types objets permettent à l’utilisateur de définir de nouveaux types de


données et de les utiliser de la même manière que les types de base.

!  Un objet est constitué de trois éléments:

!  Un nom, qui sert à l’identifier de manière unique

!  Des données appelées attributs définis à partir des types de base ou des
types utilisateurs;

!  Des méthodes manipulant ces attributs. Ces méthodes peuvent être écrite en
PL/SQL, en C ou en Java. Chaque objet possède une méthode constructeur
qui crée un nouvel objet selon les spécifications du type sous-jacent.
© O.Lamouchi 2
Introduction

!  Sous oracle, il existe 2 type d’objet complexes: les tableaux pré-dimensionnés


(VARRAY) et les tables imbriquées (NESTED TABLES)

!  Il est possible de représenter un objet par sa référence (OID) qui permet


d’éviter les jointures de tables et de gagner en vitesse d’accès.

!  Grâce à la possibilité d’implémenter des méthodes au sein d’objet, il est


possible de coder la logique d’une application à l’interieur même de la base de
données au lieu d’utiliser le code situé côté client.

!  Oracle suit le standard SQL3 en ce qui concerne la définition de types objet et


les techniques de modélisation d’objets.

© O.Lamouchi 3

Les types abstraits de données (TAD)

Les TAD ou types objet ont trois utilités:

!  La définition d’une structure de données partagée qui peut être utilisée pour
créer une ou plusieurs tables;

!  La définition d’une structure de données partagée qui peut être utilisée pour
définir un ou plusieurs attributs dans une ou plusieurs tables;

!  La définition de nouveaux types d’attributs qui vont enrichir la collection


existante de type disponibles.

© O.Lamouchi 4
Les types abstraits de données (TAD)

Création d’un type:

CREATE [OR REPLACE] TYPE nom_type AS OBJECT (liste_def_colonne,


liste_methode_def);

def_colonne::=nom_colonne type

Utilisation des types:

CREATE TABLE nom_table OF nom_type;

Exemples: CREATE TABLE Eleve(!


CREATE TYPE adr_type AS OBJECT (! !num_eleve NUMBER PRIMARY KEY,!
!Norue NUMBER,! !Nom VARCHAR2(20),!
!Rue VARCHAR2(50),! !Prenom VARCHAR2(20),!
!Ville VARCHAR2(20),! !Adresse adr_type);!
!Code_postal VARCHAR2(10));!

© O.Lamouchi 5

Les types abstraits de données (TAD)

Création d’un type:

CREATE [OR REPLACE] TYPE nom_type AS OBJECT (liste_def_colonne,


liste_methode_def);

def_colonne::=nom_colonne type
Utilisation des types:
CREATE TABLE nom_table OF nom_type;

Exemples:
CREATE TYPE personne_type AS OBJECT(!
!num_eleve NUMBER !
!Nom VARCHAR2(20),!
!Prenom VARCHAR2(20),!
!Adresse adr_type);!
CREATE TABLE Eleve OF personne_type (CONSTRAINT pk_Eleve
PRIMARY KEY (Num_eleve));!
© O.Lamouchi 6
Les Méthodes

•  Spécification d’une méthode de type fonction

MEMBER FUNCTION nom_methode [(paramètres_formels)] RETURN


type_élément_retour, [ directive_associée ]

•  Spécification d’une méthode de type Procedure

MEMBER PROCEDURE nom_methode [(paramètres_formels)]


[directive_associée ]

Paramètres_formels: no_parametre IN OUT IN OUT type

La spécification d’une méthode peut être donnée lors de la création du type


(CREATE TYPE, CREATE OR REPLACE TYPE) ou bien ultérieurement avec la
commande ALTER TYPE.

© O.Lamouchi 7

Les Méthodes

•  Exemple

© O.Lamouchi 8
Héritage

•  Les types supportent l’héritage multiple avec le mot-clé UNDER :

© O.Lamouchi 9

Gestion des types

•  Ajout d’un attribut dans un type

Propage aux tables déjà construites à partir du type

•  Ajout d’une méthode/fonction à un type

•  Supprimer un type

© O.Lamouchi 10
Les tables
CREATE TABLE nom_table OF nom_type

(CONSTRAINT nom_contrainte type_contrainte);!

"  Type_contrainte: !
- PRIMARY KEY (liste attributs clé primaire)
- FOREIGN KEY (liste attributs clé étrangère)

- REFERENCES table_ref (liste attributs clé primaire)


- CHECK (condition à vérifier)
- attribut NOT NULL

Exemple:

© O.Lamouchi 11

Les tables

Insertion de données
"  On ajoute des données comme avec une table normale

Insertion avec constructeur


"  On peut aussi utiliser le « constructeur du type » avec lequel la table a été construite :

"  Si le type est un type utilisé par un autre type, l’utilisation du constructeur du type est
obligatoire :

© O.Lamouchi 12
Les tables

Afficher les valeurs des types


SELECT nom, e.adresse.rue FROM employe e;!

Modification



Appel de procédure ou fonction

© O.Lamouchi 13

Références
"  On peut indiquer dans la définition d’un type qu’un attribut contient des références (et
non des valeurs) à des données d’un autre type.

SELECT avec références SELECT avec DEREF


Lieu de travail des employés : La fonction DEREF renvoie un objet dont on a
la référence.
SELECT nom, e.dept.lieu !
FROM employe e; !

(10,'Finances','Nice')

© O.Lamouchi 14
Références

Insertions avec référence


Pointeur NULL

INSERT INTO employe VALUES ( 1230, ‘Durand’, …, NULL);





INSERT INTO employe (matricule, nom, dept) Référence vers le dept de numéro 10
VALUES ( 1240, ‘Dupond’, (SELECT REF(d)
FROM dept d
WHERE d.numDept=10));

© O.Lamouchi 15

Références

Modification d’une référence








  Attention, cette instruction peut très bien mettre la valeur NULL dans la
colonne dept car le SELECT renvoie NULL si le département de numéro 10
n’existe pas.
  Pour éviter le problème de l’exemple précédent, il faut ajouter la contrainte
NOT NULL sur la colonne dept :
dept REF dept_type NOT NULL !

© O.Lamouchi 16



Références

Contrainte sur les références


!  Le type « REF dept_type » restreint le type référencé mais pas la table
référencée
!   Une telle référence peut référencer une valeur de n’importe quelle colonne de
table qui a le type dept_type
!   La clause SCOPE restreint la colonne référencée ; elle peut être ajoutée lors
de la définition d’une table
!Dept REF dept_type SCOPE IS dept_table;!
-> indique que dept référencera une ligne de la table dept_table (et pas
une ligne d’une autre table créée à partir du type dept_type)
!  SCOPE ne suffit pas pour imposer une contrainte stricte. Ainsi la référence
peut être «perdue», c’est-à-dire ne pas correspondre à une ligne existante, si
la ligne référencée au départ a été ensuite supprimée.
=> !CONSTRAINT r_emp_dept ! Remplacer la contrainte SCOPE par une
!FOREIGN KEY(dept)! contrainte REFERENCES que l’on ajoute
dans la table associée au type.
!REFERENCES dept_table; !

© O.Lamouchi 17

Tables imbriquées

1) CREATE [OR REPLACE] TYPE nom_type AS OBJECT


(liste_def_colonne);

2) CREATE [OR REPLACE] TYPE nom_table_type AS TABLE OF
nom_type;

3) CREATE TABLE nom_table (
Liste_def_colonne,
Liste_def_contrainte)
NESTED TABLE nom_table_imbriquee STORE AS
nom_structure_interne;

•  Nom_table_imbriquee est une colonne de type table qui fait le lien entre la table maître et
la table imbriquée.
•  Nom_structure_interne est le nom de la table qui contient les lignes de la table imbriquée
© O.Lamouchi 18
Tables imbriquées

Exemple:
CREATE TYPE emp_type AS OBJECT
(num_emp NUMBER,

nom VARCHAR2 (20),


prenom VARCHAR2(20));


CREATE TYPE emp_type_table AS TABLE OF emp_type;

CREATE TABLE departements (
(num_dep NUMBER,

Emp_table EMP_TYPE_TABLE)

NESTED TABLE emp_table STORE AS tabemp;

© O.Lamouchi 19

Vous aimerez peut-être aussi