Institut Supérieur d’Informatique - Université Tunis El Manar
Module 3 : Les Bases
de Données Objet-
relationnelle (Section 3)
Riadh ZAAFRANI
Novembre 2020
1ère année MP2L
1
1
2
Objectifs du cours
◼A la fin de cours, vous serez en mesure
de :
➢Créer et implémenter des méthodes en
SQL3
➢Comparer des objets
➢Créer des vues objets en SQL3
2
1
Plan
◼Méthodes
◼Comparaison d’objets
◼Vues objet
3
Caractéristiques des méthodes sous Oracle
❑ Encapsulation non automatique.
❑ Surcharge possible
❑ Trois catégories de méthodes
❑ Membre (MEMBER) : s'applique à un objet
❑ Statique (STATIC)
: s'applique à un type
(encapsulation)
❑ Constructeur (CONSTRUCTOR) : instanciation
❑ Appel: Requête, autre méthode, PL/SQL,
programme externe
4
3
4
2
Déclaration
❑Exemple
❑ CREATE TYPE COURS_t AS OBJECT(
ldCours NUMBER(2),
Libelle VARCHAR(50),
RefEns REF ENSEIGNANT_t,
MEMBER PROCEDURE ChangeLib (NouvLib
VARCHAR),
STATIC FUNCTION NbCours RETURN NUMBER,
CONSTRUCTOR FUNCTION COURS_t (
Idc NUMBER,
Lib VARCHAR,
IdE NUMBER)
RETURN SELF AS RESULT)
/
5
Implémentation
❑Exemple
❑ CREATE TYPE BODY COURS_t AS
❑ MEMBER PROCEDURE ChangeLib (NouvLib
VARCHAR) IS
BEGIN
END;
UPDATE les_cours
SET Libelle = NouvLib
WHERE IdCours = SELF.ldCours;
-- À suivre
6
5
6
3
Implémentation
❑ STATIC FUNCTION NbCours RETURN NUMBER
IS
n INTEGER;
BEGIN
SELECT COUNT(*)
INTO n
FROM les_cours;
RETURN n;
END;
-- À suivre
7
8
Implémentation
❑ CONSTRUCTOR FUNCTION COURS_t (ldC
NUMBER, Lib VARCHAR, IdE NUMBER)
RETURN SELF AS RESULT IS
BEGIN
SELF.ldCours := IdC:
SELF.Libelle := Lib;
SELECT REF(e) INTO SELF.RefEns
FROM les_enseignants e
WHERE e.ldPers = IdE;
RETURN SELF;
END;
❑ END;
/
7
8
4
Appel
❑Exemple
❑ DECLARE
un_cours COURS_t;
nb_cours INTEGER;
nouveau_cours COURS_t;
BEGIN
SELECT VALUE(c) INTO un_cours FROM les_cours c
WHERE c.ldCours=1;
un_cours.ChangeLib('lnformatique');
nb_cours := COURS_t.NbCours();
nouveau_cours := NEW COURS_t(5, 'Statistiques',1000);
INSERT INTO les_cours VALUES(nouveau_cours);
END;
/
9
Surcharge
9
❑Définition multiple d'une méthode
❑ Au sein d'une même classe
❑ Dans une sous classe
❑Exemple 1
❑ CREATE TYPE COURS_t AS OBJECT(
--(...)
STATIC PROCEDURE Ajout(ldC Number,
Lib VARCHAR, IdE NUMBER),
Publicité
STATIC PROCEDURE Ajout(Lib VARCHAR,
IdE NUMBER))
10
/
10
5
Surcharge au sein d'une même classe
❑ CREATE TYPE BODY COURS_t AS
STATIC PROCEDURE Ajout(ldC Number,
Lib VARCHAR, IdE NUMBER) IS
BEGIN
INSERT INTO Ies_cours VALUES (ldC, Lib, (SELECT
REF(e) FROM les_enseignants e WHERE e.ldPers = IdE));
END;
STATIC PROCEDURE Ajout(Lib VARCHAR, IdE NUMBER) IS
new_id INTEGER;
BEGIN
SELECT MAX(ldCours)+1 INTO new_id FROM les_cours;
INSERT INTO les_cours VALUES (new_id, Lib, (SELECT
REF(e) FROM les_enseignants e WHERE e.ldPers = IdE));
END;
END;
/
11
Surcharge dans une sous classe
❑ Exemple 2
❑ CREATE TYPE PERSONNE_t AS OBJECT (
--(...)
NOT FINAL MEMBER PROCEDURE Affiche)
END;
/
❑ CREATE TYPE ENSEIGNANT_t UNDER PERSONNE_t (
--(…)
OVERRIDING MEMBER PROCEDURE Affiche)
END;
/
12
11
12
6
Plan
◼Méthodes
◼Comparaison d’objets
◼Vues objet
13
13
Comparaison d’objets : Fonctions MAP et ORDER
❑Les types prédéfinis d'Oracle possèdent tous
un ordre par défaut. Dans le cas de deux
variables « VARCHAR2 », par exemple, vous
pouvez déterminer si
inférieure,
supérieure ou égale à l'autre. Sans cela, il ne
serait pas possible de trier les valeurs du type
de données spécifié.
l'une est
❑En revanche, les types d'objets ne possèdent
pas d'ordre implicite, seule l'égalité des objets
peut être comparée.
14
14
7
Comparaison d’objets : Fonctions MAP et ORDER
❑Les méthodes
«ORDER»
«MAP»
permettent de remédier à cela. En outre, ces
méthodes autorisent la comparaison d'objets
non seulement dans PL/SQL, mais aussi
dans SQL.
et
❑Ces méthodes peuvent aussi servir à trier des
objets stockés dans la base de données, ce
qui veut dire qu'elles peuvent être utilisées
dans une clause «ORDER BY» ou dans un
index.
15
15
Comparaison d’objets : Fonction MAP
▪ Exemple de définition 1
▪ CREATE OR REPLACE TYPE personne_t
…
MAP MEMBER FUNCTION cle_personne RETURN
VARCHAR2);
/
▪ CREATE OR REPLACE TYPE BODY personne_t AS
…
MAP MEMBER FUNCTION cle_personne RETURN VARCHAR2
IS
BEGIN
RETURN SELF.NOM II SELF.PRENOM II
to_char(SELF.DATE_NAlSSANCE, 'YYYYMMDD');
END cle_personne;
END;
/
16
16
8
Comparaison d’objets : Fonction MAP
▪ Exemple d’utilisation 1
▪ DECLARE
personne1 personne_t:=personne_t('BlZOÏ', 'Razvan','03/02/1995');
personne2 personne_t:=personne_t('BIZOÏ', 'Razvan','03/03/1995');
BEGIN
DBMS_OUTPUT.PUT_LINE( 'personne1' || personne1.cle_personne);
DBMS_OUTPUT.PUT_LINE( 'personne2' || personne2.cle_personne);
IF personne1> personne2 THEN
DBMS_OUTPUT.PUT_LINE( 'personne1> personne2');
ELSE
END IF;
DBMS_OUTPUT.PUT_LINE( 'personne1 < personne2');
END;
/
▪
▪ personne1 BIZOïRazvan19950203
personne2 BIZOïRazvan19950303
personne1 < personne2
17
Comparaison d’objets : Fonction MAP
▪ Exemple de définition 2
▪ CREATE TYPE FRACTION_t AS OBJECT (
numerateur INTEGER,
denominateur INTEGER,
MAP MEMBER FUNCTION Calcul RETURN REAL)
/
▪ CREATE TYPE BODY FRACTION_t AS
Publicité
MAP MEMBER FUNCTION Calcul RETURN REAL IS
BEGIN
RETURN numerateur / denominateur;
END;
END;
/
18
17
18
9
Comparaison d’objets : Fonction MAP
▪ Exemple d’utilisation 2
▪ DECLARE
f1 FRACTION_t;
f2 FRACTION_t;
BEGIN
f1 := NEW FRACTION_t (10, 4);
f2 := NEW FRACTION_t (249,100);
IF f1 > f2 THEN
-- (…)
END IF;
END;
/
19
Comparaison d’objets : Fonction ORDER
▪ Vous pouvez créer une méthode « MAP » ou
«ORDER » pour un type d'objets donné, mais
pas les deux à la fois : Une seule fonction MAP
ou ORDER par classe
groupes
d'importants
▪ Ainsi une méthode « MAP » sera plus efficace
d'objets,
pour
trier
puisqu'elle convertit
l'ensemble d'objets en un
type plus simple, qui sont alors triés directement.
▪ Avec la méthode « ORDER », seuls deux objets
peuvent être comparés à la fois, ce qui oblige à
appeler cette méthode de façon répétée.
19
20
20
10
Comparaison d’objets : Fonction ORDER
▪ ORDER est utilisée pour des objets trop
complexes pour être traités par MAP
▪ Vous pouvez créer une méthode « ORDER »,
qui reçoit un argument du même type que
l'objet et
retourne un résultat numérique
contenant l'une des valeurs suivantes:
▪ >0 si l'argument est supérieur à « SELF ».
▪ <0 si l'argument est inférieur à « SELF ».
▪ 0 si l'argument est égal à « SELF ».
21
21
Comparaison d’objets : Fonction ORDER
▪ Exemple de définition 1
▪ Nous pouvons, par exemple,
créer une
méthode «ORDER» qui trie les personnes par
leur date de naissance, comme illustré ci-
dessous.
▪ CREATE OR REPLACE TYPE personne_t
ORDER MEMBER FUNCTION
comparaison_personne(aSELF lN personne_t)
RETURN NUMBER;
/
22
22
11
Comparaison d’objets : Fonction ORDER
◼ CREATE OR REPLACE TYPE BODY personne_t AS
ORDER MEMBER FUNCTION comparaison_personne(aSELF IN
personne_t) RETURN NUMBER IS
BEGIN
CASE
WHEN aSELF.DATE_NAISSANCE = SELF.DATE_NAISSANCE THEN
RETURN 0;
WHEN aSELF.DATE_NAISSANCE> SELF.DATE_NAISSANCE THEN
ELSE
RETURN 1;
RETURN -1;
END CASE;
END comparaison_personne;
END;
/
23
23
Comparaison d’objets : Fonction ORDER
▪ Exemple de définition 2
▪ CREATE TYPE FRACTION_t AS OBJECT
(
num INTEGER,
den INTEGER,
ORDER MEMBER FUNCTION
Compare (f FRACTION_t)
RETURN INTEGER)
/
24
24
12
Comparaison d’objets : Fonction ORDER
◼ CREATE TYPE BODY FRACTION_t AS
ORDER MEMBER FUNCTION Compare (f FRACTION_t)
RETURN INTEGER IS
BEGIN
IF (f.num/f.den) < (SELF.num/SELF.den) THEN
RETURN -1;
ELSIF (f.num/f.den) > (SELF.num/SELF.den) THEN
ELSE
RETURN 1;
RETURN 0;
END IF;
END;
END;
/
25
Comparaison d’objets : Fonction ORDER
▪ Exemple d'utilisation 2
▪ DECLARE
f1 FRACTION_t;
f2 FRACTION_t;
BEGIN
Publicité
f1 := NEW FRACTION_t (10, 4);
f2 := NEW FRACTION_t (249, 100);
IF f1.Compare(f2) > 0 THEN
--(...)
END IF;
END;
/
26
25
26
13
Plan
◼Méthodes
◼Comparaison d’objets
◼Vues objet
27
27
Vues objet
◼ On peut utiliser des vues objet pour
construire des objets virtuels à partir de
données relationnelles, permettant ainsi
aux programmeurs de faire évoluer des
schémas existants pour prendre en charge
des objets.
◼ Cette possibilité permet à des applications
relationnelles et objet de coexister dans la
même base de données.
28
28
14
Vues objet
◼ Supposons que nous ayons modélisé notre
base CLIENT sous forme relationnelle, mais
que la direction ait décidé que toutes les
nouvelles applications
seraient orientées
objet.
◼ La création d'une vue objet des données
cette
existantes
faciliterait
relationnelles
transition.
29
Intérêt
▪ Même utilité que les vues relationnelles
▪ Simplification de l'accès aux données
▪ Sauvegarde indirecte de requêtes complexes
▪ Présentation
données
variable
des
selon
29
les
utilisateurs(sécurité)
▪ Support de l'indépendance logique
▪ Migration facilitée vers la technologie objet.
▪ Utilisation de méthodes sur des données tabulaires
▪ Interfaçage aisé avec des langages orientés objets
▪ Coexistence d’applications relationnelles et objet
dans la même base de données.
30
30
15
Exemple
▪ CREATE TABLE les_personnes (
IdPers NUMBER(5) PRIMARY KEY,
EtCiv ETAT_CIVIL_t,
Adr ADRESSE_t);
▪ CREATE TABLE les_enseignants (
IdPers NUMBER(5) PRIMARY KEY,
Statut VARCHAR(20));
31
31
Type structure de vue
▪ Exemple
▪ CREATE TYPE ENS_COMPLET_t AS OBJECT (
IdPers NUMBER(5),
EtCiv ETAT_CIVIL_t,
Adr ADRESSE_t,
Statut VARCHAR(20))
/
32
32
16
Création de vue objet
▪ Exemple
▪ CREATE VIEW vue_ens OF ENS_COMPLET_t
WITH OBJECT IDENTIFIER(ldPers) AS
SELECT p.ldPers, EtCiv, Adr, Statut
FROM
les_personnes p, les_enseignants e
WHERE p.ldPers = e.ldPers;
33
33
Vue objets modifiables
▪ Exemple
▪ CREATE TRIGGER cascade_insert
INSTEAD OF INSERT ON vue_ens
FOR EACH ROW
BEGIN
INSERT INTO les_personnes
VALUES (:NEW.ldPers, :NEW.EtCiv, :NEW.Adr);
INSERT INTO les_enseignants
VALUES (:NEW.ldPers, :NEW.Statut);
END;
/
34
34
17
Institut Supérieur d’Informatique - Université Tunis El Manar
Module 3 : Les Bases
de Données Objet-
relationnelle (Section 3)
Riadh ZAAFRANI
Novembre 2020
1ère année MP2L
Merci pour votre attention
35
35
18