Tp5 - Oracle Objet
Tp5 - Oracle Objet
Tp5 - Oracle Objet
Oracle – Objet 2
Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5
Introduction – Encapsulation
Principe de l’encapsulation
– Le fonctionnement interne de l’objet est caché au monde exterieur
Les attributs ne devraient pas être directement manipulés par l’exterieur
L'interface, qui définit les méthodes accessibles par l’utilisateur (publiques) est
le seul moyen d'accéder à l'objet par l'envoi de messages.
Facilite la modularisation, la réutilisation et l’indépendance code - données
Oracle – Objet 3
Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5
OBJET
Polymorphisme
Types
utilisateurs RELATIONNEL Collections
Domaine
Table
Attribut
Clé
Référence
Opérations Identifiant
Héritage
Oracle – Objet 4
Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5
Oracle – Objet 5
Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5
Spécification
Déclaration des attributs
Interface publique
Spécification des méthodes
Oracle – Objet 6
Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5
Notes:
– Un attribut est déclaré avec un nom qui doit être unique dans un type
donné, mais qui peut être réutilisé par d’autres types
– Type peut être un des types de données Oracle (exceptions) ou un type
défini par l’utilisateur (formant ainsi une structure de données imbriquée)
– Les clauses DEFAULT et NOT NULL ne peuvent pas être imposées
– Un type peut être utilisé à l’intérieur d’un autre ou comme type de table
– L'accès à un attribut peut se faire avec la notation pointée (type.attribut).
Les types peuvent être enchaînés pour accéder aux attributs imbriqués.
Oracle – Objet 7
Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5
Exercice:
– Créer un type d’objet T_Cercle caractérisée un centre (point) et un rayon
Oracle – Objet 8
Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5
– NESTED TABLE
Définit un ensemble non ordonné
De taille variable et non limité
Les éléments peuvent être accédé singulièrement
– VARRAY
Définit un ensemble ordonné
De taille variable mais limité (à définir au début)
Les éléments ne peuvent pas être accédé singulièrement
Oracle – Objet 9
Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5
Exercice
– Créer un type Polygone avec comme attribut un ensemble de points
Oracle – Objet 10
Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5
– Pour tester:
INSERT INTO Course VALUES (
'Athletissima 100m',
T_ParticipantList( T_Participant(1,'Maurice Green'), T_Participant(2,'Linford Christie'),
T_Participant(3,'Ato Bolton') )
);
SELECT C.Course, CL.* FROM Course C, TABLE(C.Participantlist) CL ;
Oracle – Objet 11
Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5
Notes:
– La déclaration des signatures des méthodes se trouve dans la spécification
du TYPE, qui définit l’interface de l’objet (méthodes accessibles).
Déclarée par le mot-clé MEMBER (méthode d’instance) ou STATIC (méthode de classe)
Une méthodes peut être une fonction (FUNCTION) ou une procédure (PROCEDURE)
– L’implémentations des méthodes se trouve dans le TYPE BODY
Contient le code (e.g. PL/SQL) à exécuter pour chaque méthode définie par l’interface
Accès possible aux valeurs de l’objet appelée grâce au mot clé SELF
Oracle – Objet 12
Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5
Pour tester:
– CREATE TABLE Rectangles OF T_Rectangle;
– INSERT INTO Rectangles VALUES (T_Point(0,0),T_Point(100,100));
– SELECT R.point1.x, R.point1.x, R.point2.x, R.point2.y, R.surface() FROM rectangles R
Exercice:
– Modifier la définition du type T_Rectangle pour y ajouter une méthode qui calcule et
renvoie le perimètre du rectangle et modifier son implémentation en conséquence
Oracle – Objet 13
Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5
Syntaxe:
– CREATE TABLE <nom_table> OF <nom_type>;
Example:
– CREATE TABLE Rectangles OF T_Rectangle;
Exercice:
– Créer une table de Lignes de type T_Ligne
Oracle – Objet 14
Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5
Syntaxe:
– CREATE TABLE <nom_table> (
<nom-col> <type-col> [ [CONSTRAINT] <contrainte-col>]*
[ [CONSTRAINT] <contrainte-table>]*
);
Example:
– CREATE TABLE Rectangles2 (
point1 T_Point,
point2 T_Point,
surface number(),
constraint CkSurf CHECK surface = ABS((point1.x-point2.x)*(point1.y-point2.y))
);
Exercice:
– Créer une table de Cercles avec un centre (T_Point) et un rayon (number)
Oracle – Objet 15
Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5
Syntaxe:
– INSERTO INTO <nom_table> VALUES (<valeurs>)
– UPDATE <nom-table> SET <nom-colonne> = <expression> [WHERE <condition>]
– DELETE FROM <nom-table> [WHERE <condition>]
Examples:
– INSERT INTO Rectangles VALUES ( T_Point(0,0), T_Point(10,10) );
– UPDATE Rectangles SET Point1 = T_Point(5,5) where Point1=T_Point(0,0);
– DELETE FROM Rectangles WHERE Point1=T_Point(5,5);
Exercice:
– Effectuez des opérations d’insertion, mise à jour et effacement sur la table Groupes
définie dans un des transparents précédants
Oracle – Objet 16
Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5
Syntaxe:
– SELECT [DISTINCT] nom-cols [AS nom-cols] FROM nom-tables
[WHERE ... ] [GROUP BY ...] [ HAVING ... ] [ORDER BY ...]
Examples:
– SELECT R.point1.x, R.point1.y, R.point2.x, R.point2.y, R.surface()
FROM Rectangles R
WHERE R.Surface()>10;
– SELECT C.Course, CL.*
FROM Course C, TABLE(C.Participantlist) CL ;
Exercice
– Selectionner les rectangles ayant un des cotés > 10, ordonnés par surface
– Selectionner toutes les couples de rectangles ayant un point en commun
Oracle – Objet 17
Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5
Oracle – Objet 18
Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5
Exemple:
– CREATE TABLE Points OF T_Point;
– CREATE TABLE Segments (
point1 REF T_Point,
point2 REF T_Point
);
– Pour tester
INSERT INTO Points VALUES(0,5);
INSERT INTO Points VALUES(10,1);
INSERT INTO Segments SELECT REF(p1), REF(p2)
FROM Points p1, Points p2
WHERE p1.x=0 and p1.y=5 AND p2.x=10 and p2.y=1
SELECT S.point1.x, S.point1.y, S.point2.x, S.point2.y FROM Segments S
Exercice:
– Effectuez des opérations d’insertion, mise à jour et effacement des points et des
segments. Afficher à chaque fois les segments
Oracle – Objet 19
Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5
Syntaxe (spécification):
– CREATE [ OR REPLACE ] TYPE <nom_type> [ UNDER
<nom_supertype> ] (
<nom_attribut> <type_attribut>,*
[ MEMBER <declaration_methode> ],*
); [ [NOT] FINAL] [ [NOT] INSTANTIABLE ]
Notes:
– [NOT] FINAL permet de déterminer si un type peut être spécialisé (ou pas).
Il n’est donc pas possible d’heriter d’un type défini comme FINAL. Par
défaut un type est défini comme FINAL
Oracle – Objet 20
Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5
Exemple:
– CREATE TYPE T_Carre UNDER T_Rectangle () NOT FINAL;
– CREATE OR REPLACE TYPE BODY T_Carre AS
MEMBER FUNCTION surface RETURN NUMBER AS
BEGIN
RETURN POWER(point1.x-point2.x,2);
END surface;
END;
Oracle – Objet 21
Université de Lausanne > Ecole des HEC > Cours de Bases de Données Avancées > TP5
Oracle – Objet 22