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
Publicité
❑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),
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.
Publicité
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
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
Publicité
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
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
Publicité
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