Professional Documents
Culture Documents
Page
1. Plan Gnral
I
1. PLAN GENERAL 2. INTRODUCTION 3. LES TYPES DE BASE (Prdfinis) 4. LES TYPES ABSTRAITS (COMPLEXES) 5. NOTION DIDENTITE 6. LA NOTION DE COLLECTION 7. CREATION ET MANIPULATION DOBJETS 8. LES LIENS DASSOCIATIONS
2
Copyright G. Mopolo-Mok Oracle et le modle Objet Relationnel
Page
1. Plan Gnral
I
9. LIENS D HERITAGE 10. LES VUES 11. GESTION DES OBJETS VOLUMINEUX 12. PL/SQL OBJET 13. Import/Export 14. CONCLUSION 15. EXERCICES
Page
2. INTRODUCTION
I
Manipulation des objets volumineux LOBs (Large Objects). Va au del des blobs traditionnels
Page
2. INTRODUCTION
I
Page
2. INTRODUCTION
I
Page
Les types de base (CHAR, VARCHAR2, DATE, NUMBER, .) de la version 7 sont conservs dans les versions objets Les nouveaux types
Les associations rfrentielles "Pre/Fils" (REF). Les collections : VARRAY (tableaux) et Nested Tables (Tables imbriques). Les LOBs : BLOB, CLOB, BFILE NOTE : L utilisateur pourra ajouter ses propres types: les types donnes abstraits (ADT).
Page
PLAN
Les Types de donnes Abstraits(ADT) Exemple de cration dun ADT sous Oracle Dfinition des Mthodes dun Type Abstrait Comparaison sur les ADT Complment sur les ADT Oracle Modification dun ADT Suppression dun ADT Visualisatioin des Informations sur les ADT Encapsulation Constructeur Instanciation
Page
Page
CORPS DU TYPE
Page
10
Page
Page
12
Page
13
Page
14
Page
15
Page
16
Page
17
Page
18
Page
19
Comparaison dADT
Soit deux ADT C1 et C2 dun type Type 1. La comparaison de C1 et C2 peut tre faite par dfaut ou en rcrivant les mthodes MAP et ORDER la comparaison par dfaut nest possible que pour lgalit ou la diffrence entre objet. Exemple : C1 = C2, C1 != C2 Par dfaut, pour que deux objets soient gaux, la valeur de chacun de leurs attributs doit tre gale.
Page
20
Comparaison dADT
MAP MEMBER fonction :
Permet de dfinir une fonction qui rend la position relative dun objet dans lensemble des instances dun type. Lordre des objets est dfini par rapport une valeur scalaire RENDUE PAR LA FONCTION. La valeur scalaire peut tre de type(DATE, NUMBER, VARCHAR2, les types ANSI SQL tels que CHARACTER or REAL) possde un seul paramtre implicite SELF adapt pour le TRI dun grand nombre dobjets et les JOINTURES PAR HACHAGE
Page
21
Comparaison dADT
ORDER MEMBER fonction
permet de dfinir une mthode qui prend en paramtre un objet du type et le compare avec lobjet courant SELF lordre est dfinie sur une ou plusieurs colonne du type permet de comparer deux Objets Il sagit dune approche de comparaison "PERSONALISEE" Evaluation perptuelle de la fonction POUR CHAQUE OBJET => lenteur
Page
22
Comparaison dADT
Notes :
il est impossible de dfinir la fois une mthode ORDER MEMBER et une mthode MAP MEMBER dans un mme type pas plus dune mthode ORDER ou MAP par type MAP et ORDER sont appeles automatiquement lors de la comparaison dobjets
Page
23
Comparaison dADT
Exemple SANS les mthodes MAP et ORDER
CREATE OR REPLACE TYPE adresse2_t as object( Numero NUMBER(4), Rue VARCHAR2(20), Code_Postal NUMBER(5), Ville VARCHAR2(20), quartier VARCHAR2(20) ); / CREATE TABLE adresse2_table(adr adresse2_t ); INSERT INTO adresse2_table VALUES ( adresse2_t(1, rue du congres, 6000, Nice, Centre)); INSERT INTO adresse2_table VALUES ( adresse2_t(3, rue du congres, 6000, Nice, Centre)); INSERT INTO adresse2_table VALUES( adresse2_t(2, rue des garages, 6100, Nice, Nord)); INSERT INTO adresse2_table VALUES( adresse2_t(2, rue du port, 6300, Nice, Ouest)); SQL> SELECT * FROM adresse2_table ORDER BY adr; SELECT * FROM adresse2_table order by adr * ERROR at line 1: ORA-22950: cannot ORDER objects without MAP or ORDER method
Page
24
Comparaison dADT
Exemple avec la mthode MAP MEMBER
CREATE OR REPLACE TYPE adresse2_t as object( Numero NUMBER(4), Rue VARCHAR2(20), Code_Postal NUMBER(5), Ville VARCHAR2(20), quartier VARCHAR2(20), MAP MEMBER FUNCTION compAdresse RETURN VARCHAR2, PRAGMA RESTRICT_REFERENCES (compAdresse, WNDS, WNPS, RNPS, RNDS) ); / CREATE OR REPLACE TYPE BODY adresse2_t IS MAP MEMBER FUNCTION compAdresse RETURN VARCHAR2 IS BEGIN RETURN ville||rue||numero; END; END; / NOTE : La valeur de Comparaison des instance de de adresse2_t sera : ville||rue||numero. Ce qui rduit la comparaison celle d un type scalaire Oracle
Page
25
Comparaison dADT
Exemple avec la mthode MAP MEMBER
CREATE TABLE adresse2_table(adr adresse2_t ); INSERT INTO adresse2_table VALUES ( adresse2_t(1, rue du congres, 6000, Nice, Centre)); INSERT INTO adresse2_table VALUES ( adresse2_t(3, rue du congres, 6000, Nice, Centre)); INSERT INTO adresse2_table VALUES( adresse2_t(2, rue des garages, 6100, Nice, Nord)); INSERT INTO adresse2_table VALUES( adresse2_t(2, rue du port, 6300, Nice, Ouest)); SQL> SELECT * FROM adresse2_table; ADR(NUMERO, RUE, CODE_POSTAL, VILLE,QUARTIER) ADRESSE2_T(1, rue du congres, 6000, Nice, Centre) ADRESSE2_T(3, rue du congres, 6000, Nice, Centre) ADRESSE2_T(2, rue des garages, 6100, Nice, Nord) ADRESSE2_T(2, rue du port, 6300, Nice, Ouest) SQL> SELECT * FROM adresse2_table order by adr; ADR(NUMERO, RUE, CODE_POSTAL, VILLE,QUARTIER) ADRESSE2_T(2, rue des garages, 6100, Nice, Nord) ADRESSE2_T(1, rue du congres, 6000, Nice, Centre) ADRESSE2_T(3, rue du congres, 6000, Nice, Centre) ADRESSE2_T(2, rue du port, 6300, Nice, Ouest)
Page
26
Comparaison dADT
Exemple avec la mthode ORDER MEMBER
Nous souhaitons classer les adresses selon leur position gographique. Nord, Centre, Sud, Est et enfin Ouest. MAP MEMBER ne suffit plus.
CREATE OR REPLACE TYPE adresse2_t as object( Numero NUMBER(4), Rue VARCHAR2(20), Code_Postal NUMBER(5), Ville VARCHAR2(20), quartier VARCHAR2(20), ORDER MEMBER FUNCTION compAdresse (adr IN adresse2_t) RETURN NUMBER, PRAGMA RESTRICT_REFERENCES (compAdresse, WNDS, WNPS, RNPS, RNDS) );
Page
27
Comparaison dADT
Exemple avec la mthode ORDER MEMBER
CREATE OR REPLACE TYPE BODY adresse2_t AS ORDER MEMBER FUNCTION compAdresse (adr IN adresse2_t ) RETURN NUMBER IS position1 NUMBER :=0; position2 NUMBER :=0; concAdr1 VARCHAR2(60) := SELF.ville||SELF.rue||SELF.numero; concAdr2 VARCHAR2(60) := adr.ville|| adr.rue|| adr.numero; BEGIN CASE SELF.quartier WHEN Nord THEN position1 := 1; WHEN Centre THEN position1 := 2; WHEN Sud THEN position1 := 3; WHEN Est THEN position1 := 4; WHEN Ouest THEN position1 := 5; END CASE; CASE adr.quartier WHEN Nord THEN position2 := 1; WHEN Centre THEN position2 := 2; WHEN Sud THEN position2 := 3; WHEN Est THEN position2 := 4; WHEN Ouest THEN position2 := 5; END CASE;
Page
28
Comparaison dADT
Exemple avec la mthode ORDER MEMBER
concAdr1 := position1||concAdr1; concAdr2 := position2|| concAdr2; IF concAdr1 = ConcAdr2 THEN return 0; ELSIF concAdr1 > ConcAdr2 THEN return 1; ELSIF concAdr1 < ConcAdr2 THEN return -1; END IF; END; END; /
Page
29
Comparaison dADT
Exemple avec la mthode ORDER MEMBER
CREATE TABLE adresse2_table(adr adresse2_t ); INSERT INTO adresse2_table VALUES ( adresse2_t(1, rue du congres, 6000, Nice, Centre)); INSERT INTO adresse2_table VALUES ( adresse2_t(3, rue du congres, 6000, Nice, Centre)); INSERT INTO adresse2_table VALUES( adresse2_t(2, rue des garages, 6100, Nice, Nord)); INSERT INTO adresse2_table VALUES( adresse2_t(2, rue du port, 6300, Nice, Ouest)); SQL> SELECT * FROM adresse2_table; ADR(NUMERO, RUE, CODE_POSTAL, VILLE) ADRESSE2_T(1, rue du congres, 6000, Nice, Centre) ADRESSE2_T(3, rue du congres, 6000, Nice, Centre) ADRESSE2_T(2, rue des garages, 6100, Nice, Nord) ADRESSE2_T(2, rue du port, 6300, Nice, Ouest) SQL> SELECT * FROM adresse2_table order by adr; ADR(NUMERO, RUE, CODE_POSTAL, VILLE) ADRESSE2_T(2, rue des garages, 6100, Nice, Nord) ADRESSE2_T(1, rue du congres, 6000, Nice, Centre) ADRESSE2_T(3, rue du congres, 6000, Nice, Centre) ADRESSE2_T(2, rue du port, 6300, Nice, Ouest)
Page
30
La fonction IS NULL permet de tester si la rfrence vers un ADT est null ou pas La fontion IS DANGLING permet de vrifier si une rfrence pointe vers un objet dtruit. L indexation d attributs d ADT est possibles s' ils sont accessibles et ne sont ni des VARRAYs, ni des LOBs, ni des NESTED TABLES.
31
Page
DESCRIPTION
Compilation du corps et/ou de la spcification d' type un Ajout de nouvelles mthodes un type
Page
32
Notes
Ajout de nouvelles mthodes uniquement La structure entire du type doit tre reprise
Page
33
Page
34
Page
35
Page
36
Page
Loption CASCADE peut tre suivi de INCLUDING DATA ou NOT INCLUDING DATA : avec ou sans conversion de donnes des tables. INCLUDING DATA est loption par dfaut
Page
38
Page
39
Syntaxe pour la suppression du corps d' type un DROP TYPE BODY nomType ;
Exemple
DROP TYPE BODY adresse_t;
Page
40
NOM DE LA VUE ALL_TYPES DBA_TYPES USER_TYPES ALL_COLL_TYPES DBA_COLL_TYPES USER_COLL_TYPES ALL_TYPE_ATTRS DBA_TYPE_ATTRS USER_TYPE_ATTRS ALL_TYPE_METHODS DBA_TYPE_METHODS USER_TYPE_METHODS
Page
41
Commentaire sur les index dfinis (au sens nouveau mcanisme d indexation) par le user USER_INDEXTYPE_COMMENTS USER_INDEXTYPE_COMMENTS USER_INDEXTYPE_COMMENTS Information sur l oprateur d un index dfini par l utilisateur USER_INDEXTYPE_OPERATORS USER_INDEXTYPE_OPERATORS USER_INDEXTYPE_OPERATORS
Page
42
Page
43
1. Liste des types crs par l' utilisateur courant sql>select type_name, type_oid, attributes, methods, local_attributes from user_types;
TYPE_NAME TYPE_OID ATTRIBUTES METHODS ADRESSE2_T A73CC5B2852F418E89136F467DA27C77 4 1 ADRESSE3_T 17E3DBF26849423EB0F6F44CFF2C5EE7 6 2 ADRESSE_T E1F25E99482849E49A9B6AF3A10C2A03 4 0 PILOTE_T 0B930966561E4FF8B8140663F78A9960 6 0 REF_PILOTE_T AB2360EC8BEC4F1EBFE81D0E5F270559 6 3
2. Liste des attributs des types crs par l' utilisateur courant
SQL> SELECT type_name, attr_name, attr_type_name FROM user_type_attrs; TYPE_NAME ADRESSE2_T ADRESSE2_T ADRESSE2_T ADRESSE2_T ADRESSE3_T
Page
44
Encapsulation
L' encapsulation est le principe qui consiste considrer un objet comme une BOITE NOIRE ACCESSIBLE UNIQUEMENT A TRAVERS LES OPERATIONS DEFINIES sur celle -ci L' Encapsulation en C++ par exemple est gre travers trois mots cls : PRIVATE, PROTECTED et PUBLIC Le moteur Oracle ne supporte pas l' encapsulation telle que dfinie. C' au programmeur de se limiter est l' appel de mthodes
DONNEES
METHODES
Page
45
Constructeur
Un Constructeur est une mthode spciale ayant le mme nom que le type. Le constructeur du type ADRESSE_T sappelle ADRESSE_T. un constructeur sert la cration et la mise jour des objets (dans les ordres SQL : INSERT, UPDATE, dans des fonctions PL/SQL). Un Constructeur en Oracle est appelable partout ou une mthode peut tre appele Un constructeur par dfaut est disponible. Ses paramtres sont lensemble des champs du type L utilisateur peut BRICOLER constructeurs via des Mthodes (jusqu la version 8) ses propres STATIQUES
Page
46
Constructeur
Exemple : constructeur par dfaut
Soit la table objet Pilote de pilote_t:
CREATE TABLE o_pilote OF ref_pilote_t; // Insertion d un lement de la table objet. Pour la colonne, le // Constructeur adresse_t sera appel INSERT INTO o_pilote VALUES ( ref_pilote_t(1, Jean DUPOND, adresse_t(1, rue Arago,6000, NICE), 0493825084, 12-JUN-47, 12000.50) ); NOTE : lappel de ref_PILOTE_T() est facultatif
Modification via un constructeur UPDATE o_pilote op set op.adr = ref_adresse_t(5, ' de la traverse' rue ,6000, ' ) Nice' Note : - tous les champs doivent tre concerns - il est prfrable d' accder directement un champ ou via une une mthode ou un autre constructeur si la MAJ ne concerne pas la ligne entire,
Page
47
Constructeur
Exemple : constructeur dfini par lutilisateur (jusqu la V8)
CREATE OR REPLACE TYPE adresse4_t AS OBJECT( Numero NUMBER(4), Rue VARCHAR2(20), Code_Postal NUMBER(5), Ville VARCHAR2(20), STATIC FUNCTION cons_adresse4_t(numero Number , rue VARCHAR2 ) RETURN Adresse4_t , ORDER MEMBER FUNCTION compAdresse (adr IN adresse4_t) RETURN NUMBER, PRAGMA RESTRICT_REFERENCES (compAdresse, WNDS, WNPS, RNPS, RNDS)); /
Page
48
Constructeur
Exemple : constructeur dfini par lutilisateur(jusqu la V8)
create or replace type body adresse4_t is STATIC FUNCTION cons_adresse4_t(numero Number , rue VARCHAR2 ) RETURN Adresse4_t IS begin return adresse4_t(numero, rue, null, null); end; ORDER MEMBER FUNCTION compAdresse (adr IN adresse4_t) RETURN NUMBER is begin if self.numero<adr.numero then return -1; end if; if self.numero>adr.numero then return 1 ; end if; return 0; End; end; /
Page
49
Constructeur
Exemple : constructeur lutilisateur(jusqu la V8) dfini par
declare adr1 adresse4_t:=adresse4_t(1, Alufa, 5000, Ifa); adr2 adresse4_t:=adresse4_t.cons_adresse4_t(1, Josoe); begin adr2.ville:= Jerusalem ; Adr2.code_postal :=10000; end; /
Page
50
Instanciation
Il nest pas possible dinstancier un type abstrait sinon que dans une table ou dans un programme
Type PILOTE_T Attributs ou Champs PL# NOM ADRESSE TEL DNAISS SALAIRE Mthodes getSalaire setSalaire
PL# : 1 Nom : Tintin Milou Adresse : (1, R Arago , 6000 Bruxelles ) Tl : 0493825084 Dnaiss : 12-10-40 Salaire : 12000.0
PL# :2 Nom : Dupond Dupont Adresse : (1, R Gare , 75 Paris ) Tl : 0141825084 Dnaiss : 12-10-45 Salaire : 13200.0
pil_var
PILOTE_T;
51
5. NOTION DIDENTITE
I
PLAN
Identit sur les tables Identit sur les vues Diffrences entre un OID et ROWID
Page
52
5. NOTION DIDENTITE
I
Page
53
5. NOTION DIDENTITE
I
Exemple : Manipulation des rfrences CREATE TABLE O_REF_PILOTE OF REF_PILOTE_T; CREATE TABLE ref_Vol ( Vol# NUMBER(4) PRIMARY KEY, VD VARCHAR2(20), VA VARCHAR2(20), Pilote REF ref_pilote_t); --type abstrait dfini pralablement
Page
54
5. NOTION DIDENTITE
I
Exemple : Manipulation des rfrences et la clause RETURNING REF( ) INTO ... La clause RETURNING... REF( ) INTO permet, lors de linsertion dune ligne dans une table Objet de capturer la vole la rfrence vers cet Objet. L' intrt est la mise jour des liens. // Insertion d un pilote et d un vol dans un programme PL/SQL declare pil_ref REF ref_pilote_t :=null; Begin INSERT INTO o_ref_pilote op VALUES ( ref_pilote_t(1, ' Dupond' Jean , adresse_t(3, ' Arago'6000, ' rue , NICE' ' ), 0493825084' , ' 11-AUG-62'10000.5)) RETURNING ref(op) INTO pil_ref; , INSERT INTO ref_vol values(400, ' Paris'' , Nice'pil_ref); , end; /
Page
55
5. NOTION DIDENTITE
I
Les vues objets possdent des identifiants physiques appels Primary key OID (pseudo OID) avec leur pendant la manipulation Primary key REF (pseudo REF) les vues objets servent entre autre crer des OID sur les tables relationnelles classiques !!! Note: voir chap. 10 pour plus de dtails sur les vues
Page
56
5. NOTION DIDENTITE
I
Description cration d' vue objet sur le type une nomTypeObjet permet de spcifier la ou les colonnes utilises comme cl pour identifier de faon unique les lignes de la vue objet. Cette clause est obligatoire s' il s' d' vue sur une table objet agit une ou une vue objet.
Page
57
5. NOTION DIDENTITE
I
NOTES : - les attributs Attribut1, Attribut2, sont la cls primaire de la table sous-jascente
Page
58
5. NOTION DIDENTITE
I
Exemple :
CREATE table Pilote1 ( PL# NUMBER(4) CONSTRAINT pk_pilote1 PRIMARY KEY, nom VARCHAR2(12), adresse adresse_t,-- type abstrait dfini pralablement Tel VARCHAR2(12), dnaiss DATE, salaire NUMBER(7,2)); // cration du type Ville_pil_t CREATE OR REPLACE TYPE Ville_pil_t AS OBJECT( plnum NUMBER(4), nom CHAR(20), ville CHAR(20)); CREATE OR REPLACE VIEW Ville_pil_v OF Ville_pil_t WITH OBJECT IDENTIFIER(plnum) AS -- liste de colonnes assurant l unicit de la cl select p.Pl#, p.nom, p.adresse.ville from Pilote1 p;
Page
59
5. NOTION DIDENTITE
I
Exemple : INSERT INTO pilote1 VALUES (5, Milou TINTIN, adresse_t(15, Av Mars, 75000, CAP), 0493825084, 11/08/64, 15000.5);
SQL> SELECT * FROM ville_pil_v; PLNUM 4 5 NOM Milou TINTIN Milou TINTIN VILLE Cap Cap
SQL> SELECT REF(v) FROM ville_pil_v v; REF(V) 000050030A004CAA966C70AF1111D2A64700A0245FEFFD00000 01426010001000100290000000000090604002A0007000000 200200000000000000001602C105000000000000000000000000000 00000000000 000050030A004CAA966C70AF1111D2A64700A0245FEFFD00000 01426010001000100290000000000090604002A0007000000 200200000000000000001602C106000000000000000000000000000 00000000000
Page
60
5. NOTION DIDENTITE
I
identifiant immuable NON Sert indexer partage d' objets OUI NON
SQL> SELECT REF(op), ROWID FROM o_ref_pilote op; REF(OP) ROWID 000028020985B3AD5BB8C04D39BF81C8DB5573EFE53AFC0C48 6CA3447283858183F28672A6020001 B20000 AAAIFzAAIAAAAGyAAA 0000280209A36782FB22EE44409D6560943CFD7A433AFC0C486 CA3447283858183F28672A6020001 B20001 AAAIFzAAIAAAAGyAAB
Page
61
6. NOTION DE COLLECTION
I
PLAN
Gnralits Les tableaux variables (VARRAY) Les tables imbriques (Nested Table) Indexation dune Nested Table Stockage dune Nested Table Mthodes sur les Collections Comparaison entre VARRAY et Nested Table
Page
62
6. NOTION DE COLLECTION
I
Gnralits
Deux types de collections :
- Les tableaux de longueur variable (VARRAY) ANSI SQL. - Ensemble Multiple ou Bag (Nested Table) ANSI standard.
Page
63
6. NOTION DE COLLECTION
I
Syntaxe
CREATE [OR REPLACE ] TYPE nomType AS {VARRAY | VARYING ARRAY} (nombreMaxDlments) OF typeDeDonnes
Page
64
6. NOTION DE COLLECTION
I
Page
65
6. NOTION DE COLLECTION
I
HANGAR# AVIONS(AV#, AVTYPE, LOC, CAP) 1 AVIONS_T(AVION_T(1, AIRBUS, NICE, 300)) 2 AVIONS_T(AVION_T(2, AIRBUS, NICE, 300)) 3 AVIONS_T(AVION_T(3, AIRBUS, NICE, 300), avion_t ( 5, AIRBUS, PARIS,320))
Mise jour d' VARRAY. un UPDATE hangar SET avions =avions_t(avion_t ( 4, CARAVELLE,PARIS,320)) WHERE hangar#=2 ;
Page
66
6. NOTION DE COLLECTION
I
Page
67
6. NOTION DE COLLECTION
I
Caractristiques
Une Nested Table peut tre un champ, un attribut, une variable ou un paramtre dont le type de donne est un type table . Les Store Tables sont des segments physiques o sont stocks les instances des Nested Tables
Page
68
6. NOTION DE COLLECTION
I
@1
@3
Page
69
6. NOTION DE COLLECTION
I
Page
70
6. NOTION DE COLLECTION
I
-- Utilisation du type table VOL2_SET_T CREATE OR REPLACE TYPE Avion2_ns_t AS OBJECT( Av_num NUMBER(3), Av_type VARCHAR2(12), Av_loc VARCHAR2(20), Av_cap NUMBER(3), Av_rem CLOB, Av_liste_vol Vol2_set_t) ;
NOTE : dans ce modle un VOL n' existe que parce qu' ya un il PILOTE.
Page
71
6. NOTION DE COLLECTION
I
Page
72
6. NOTION DE COLLECTION
I
Page
73
6. NOTION DE COLLECTION
I
Page
74
6. NOTION DE COLLECTION
I
Page
75
6. NOTION DE COLLECTION
I
SELECT avions FROM hangar3; AVIONS(AV_NUM, AV_TYPE, AV_LOC, AV_CAP, AV_REM) AVION3_SET_T(AVION3_T(1, AIRBUS, NICE, 300, NULL)) AVION3_SET_T(AVION3_T(2, CARAVELLE, NICE, 300, NULL))
Page
76
6. NOTION DE COLLECTION
I
Page
77
6. NOTION DE COLLECTION
I
Page
78
6. NOTION DE COLLECTION
I
Exemple
ALTER TABLE store_avion3_set STORAGE (initial 10K next 10K pctincrease 0); CREATE TABLE hangar4 ( hangar# number(2), avions avion3_set_t)
TABLESPACE TOOLS NESTED TABLE avions STORE AS store_avion4_set STORAGE ( initial 10 next 14K);
Page
79
6. NOTION DE COLLECTION
I
Page
80
6. NOTION DE COLLECTION
I
Page
81
6. NOTION DE COLLECTION
I
Page
82
6. NOTION DE COLLECTION
I
VARRAYs Collection ordonne Stock dans le mme segment que le contenu de la table ou dans un segment spar
N autorise pas les indexes Autorise les indexes Adapt pour un nombre limit de donnes Adapte pour un nombre illimit de donnes
Page
83
PLAN
Gnralits Cration et manipulation des tables objets Insertion dans une table objet Consultation dune table objet Mise jour dans une table objet Contraintes dintgrit dans les tables objets Les nouveaux Oprateurs DML Les nouvelles Extensions DML
Page
84
Gnralits
Oracle propose partir d' Oracle V8 deux types de tables : les tables Objets et les tables relationnelles traditionnelles Les tables objets sont identifies par les OID et les ROWID, les tables Relationnelles sont identifies uniquement par les ROWID De nouveaux oprateurs et mots cls(TABLE, REF, CAST, MULTICAST, RETURNING, ) sont introduits pour faciliter la manipulation des objets
Page
85
Page
86
Page
87
INSERT INTO r_pilote4 VALUES ( pilote4_t(1, ' Alain DURAND' , adresse_t(1, ' Traverse des Brucs' ,6560, ' VALBONNE' ), ' 0493825096'' , 12-JUN-57'16000.50) ); ,
Page
88
Jean DUPOND ADRESSE_T(1, rue Arago, 6000, NICE) -- consultation dune table relationnelle avec type complexe
Page
89
00002802096ABAF6D9B23511D2A64E00A0245FEFFD6ABA F6D8B23511D2A64E00A0245FEFFD014002560000
Page
90
Page
91
Page
92
Page
93
Ces contraintes peuvent tre exprimes pendant la cration de la table ou pendant sa mise jour.
CREATE TABLE nomTableObjet OF nomType ( {{colonne | attribut} [DEFAULT expr] [contrainteDeNiveauColonne], ... | contrainteDeNiveauTable;}) ALTER TABLE nomTableObjet ADD ContrainteDeNiveauTable;
Page
94
Page
95
Note :
l' oprateur THE est devenu Obsolte, Utiliser TABLE la place
Page
96
Page
97
Page
98
INSERT INTO vol4 SELECT 200, ' PARIS'' , TOULOUSE'REF(p) , FROM o_pilote4 p WHERE p.nom =' DUPOND' Jean ;
Page
99
DEREF(PILOTE)(PL#, NOM, ADRESSE(NUMERO, RUE, CODE_POSTAL, VILLE), TEL, DNAISS, SALAIRE) PILOTE4_T(1, Jean DUPOND, ADRESSE_T(22, Mariner, 6555, Mt Doc), 0493825095, 12-JUN-47, 12001)
Page
100
Page
101
Page
102
Page
103
8. LIENS DASSOCIATIONS
I
PLAN
Gnralits Gestion des liens dassociations Via les rfrences Dfinition des contraintes d' intgrits Limitation de la visibilit des Rfrences (SCOPE FOR) Insertion travers les liens Mise jour travers les liens Consultation travers les liens Suppression travers les liens Suppression dans une Nested table contenant des rfrences Autres considrations
Page
104
8. LIENS DASSOCIATIONS
I
Gnralits
D un point de vue conceptuel, un lien d association entre deux ENTITES est une relation (de type 1:N ou N:M) entre les instances de ces deux ENTITES. La mise en oeuvre des liens d' associations se fait travers la notion de Rfrence Peuvent tre qualifis de jointure cable Peuvent tre poss au niveau table ou au niveau Type Doivent tre entirement grs par le dveloppeur
Page
105
8. LIENS DASSOCIATIONS
I
/ --Cration de type table (liste de vol) : Les lments de cette liste sont des rfrences vers des vols.
Create or replace type refVol_t as object( refVol REF VOL6_T ) /
Ou bien
CREATE OR REPLACE TYPE SET_VOL6_T AS TABLE OF REF VOL6_T /
NOTE : - La colonne implicite COLUMN_VALUE d une Collection permet de manipuler les lments de la liste.
Page
106
8. LIENS DASSOCIATIONS
I
Page
107
8. LIENS DASSOCIATIONS
I
Page
108
8. LIENS DASSOCIATIONS
I
Page
109
8. LIENS DASSOCIATIONS
I
Page
110
8. LIENS DASSOCIATIONS
I
Page
111
8. LIENS DASSOCIATIONS
I
Page
112
8. LIENS DASSOCIATIONS
I
Page
113
8. LIENS DASSOCIATIONS
I
Page
114
8. LIENS DASSOCIATIONS
I
INSERT INTO VOL6 SELECT 350,1, 2, Nice, Lille, REF(px), REF(ax) FROM pilote6 px, Avion6 ax WHERE px.pl# =1 AND ax.av# =2; INSERT INTO VOL6 SELECT 450, 2, 1, Nice, Lille, REF(px), REF(ax) FROM pilote6 px, Avion6 ax WHERE px.pl# = 2 AND ax.av#=1;
Page
115
8. LIENS DASSOCIATIONS
I
Page
116
8. LIENS DASSOCIATIONS
I
Page
117
8. LIENS DASSOCIATIONS
I
Page
118
8. LIENS DASSOCIATIONS
I
INSERT INTO VOL6 v VALUES(550,3,4, Nice, Lille, refpilote, refavion) RETURNING ref(v) INTO refVol1; INSERT INTO VOL6 v VALUES(650,3,4, Nice, Lille, refpilote, refavion) RETURNING ref(v) INTO refVol2;
Page
119
8. LIENS DASSOCIATIONS
I
-- insertion en sappuyant sur la cl trangre INSERT INTO TABLE(SELECT a.av_liste_vols FROM avion6 a WHERE a.av# = 4) SELECT REF(v) FROM Vol6 v WHERE v.avion# = 4; -- insertion connaissant les rfrences insrer INSERT INTO TABLE(SELECT a.av_liste_vols FROM avion6 a WHERE a.av# = 4) values(refvol1); INSERT INTO TABLE(SELECT a.av_liste_vols FROM avion6 a WHERE a.av# = 4) values(refvol2); -- insertion connaissant un pilote travers le lien INSERT INTO TABLE(SELECT p.Pil_liste_vols FROM pilote6 p WHERE p.pl# = 3) lvols SELECT REF(v) FROM Vol6 v WHERE v.refPilote.pl# = 3; END; /
Page
120
8. LIENS DASSOCIATIONS
I
Page
121
8. LIENS DASSOCIATIONS
I
Page
122
8. LIENS DASSOCIATIONS
I
Page
123
8. LIENS DASSOCIATIONS
I
Page
124
8. LIENS DASSOCIATIONS
I
Page
125
8. LIENS DASSOCIATIONS
I
Page
126
8. LIENS DASSOCIATIONS
I
Page
127
8. LIENS DASSOCIATIONS
I
CURSOR(SELECTP6.NOM, CURSOR STATEMENT : 1 CURSOR STATEMENT : 1 NOM REF_VOL6.VOL# REF_VOL6.PILOTE# Jean DUPOND 300 1 Jean DUPOND 350 1 CURSOR STATEMENT : 1 CURSOR STATEMENT : 1 NOM REF_VOL6.VOL# REF_VOL6.PILOTE# Milou TINTIN 450 2 NOM REF_VOL6.VOL# REF_VOL6.PILOTE# Jean DUPOND 550 3 Jean DUPOND 650 3
Page
128
8. LIENS DASSOCIATIONS
I
Page
129
8. LIENS DASSOCIATIONS
I
Page
130
8. LIENS DASSOCIATIONS
I
Autres Considrations
la gestion des liens dassociations via les rfrences en s' appuyant sur REF et les Nested Tables "devrait" favoriser les performances dans un contexte navigationnel il sagit dune sorte dimplmentation de la jointure si on connecte deux tables par l' galit la programmation dapplications objets est mieux adapte dans un langage L3G plutt que SQL seul
Page
131
9. Lien dhritage
I
PLAN
Gnralits Les sous-types Surcharge des mthodes et des attributs Types non instanciables Les types et les mthodes finales Conversion de types Les nouveaux oprateurs lis lhritage
Page
132
9. Lien dhritage
I
Gnralits
Soit deux types A et B, on dit que A hrite de B, ssi l' ensemble des caractristiques statiques et dynamiques de B sont aussi implicitement celles de A. On dit aussi que A est un fils de B ou que B est pre de A. LHritage est le mcanisme de transmission des proprits dun type vers les types drivs. Oracle supporte depuis la version 9, lhritage simple
Page
133
9. Lien dhritage
I
Les sous-types
Syntaxe
CREATE OR REPLACE TYPE nomType UNDER superType ( [inheritanceClauses] {sousProgammeClause | MapOrderClause } ) [{[NOT] FINAL] | [[NOT] INSTANCIABLE]}] Mot cl Description UNDER Pour indiquer le type pre inheritanceClauses Proprits d hritage au niveau des fonctions et des procdures FINAL Type ne pouvant plus tre tendu (pas de sous-types) INSTANCIABLE Type pouvant avoir des instances
Page
134
9. Lien dhritage
I
Les sous-types
Exemple de cration dun sous-type
CREATE OR REPLACE TYPE Personne_t AS OBJECT( numInsee varchar2(30), nom varchar2(20), Prenom varchar2(20), DateNaiss date, MEMBER PROCEDURE afficher ) NOT FINAL; / CREATE OR REPLACE TYPE Employee_t UNDER Personne_t ( salaire number(7,2) ); / NOTE :
Si l option NOT FINAL n est pas prcis, le type est FINAL. On ne peut pas crer des sous-types partir de lui
Page
135
9. Lien dhritage
I
Page
136
9. Lien dhritage
I
Limites de la redfinition
On ne peut redfinir une mthode finale Les mthodes MAP et ORDER ne peuvent tre redfini Une mthode statique dun sous-type ne peut redfinir une mthode du type pre Une mthode membre dun sous-type ne peut redfinir une mthode statique du type pre Le prototype de la mthode dans le sous-type doit tre quivalent celui de la mthode au niveau du type pre
Page
137
9. Lien dhritage
I
Page
138
9. Lien dhritage
I
END; /
Page
139
9. Lien dhritage
I
Conversion de types
A limage des systmes objets, une instance dun sous-type peut apparatre partout ou une instance dun type pre apparat. Exemple
CREATE TABLE o_personne of personne_t; INSERT INTO o_personne VALUES(personne_t(122222, Dong, Jing Tong, 10/10/82)); INSERT INTO o_personne VALUES(employee_t(222222, Dong, Fei Fei, 10/10/90,10000.0)); Select * from o_personne;
Page
140
9. Lien dhritage
I
Conversion de types
Limitation des conversions implicites
Lors de la cration il est possible dinterdire toute substitution
CREATE TABLE o_personne2 OF personne_t NOT SUBSTITUTABLE AT ALL LEVELS;
Autre cas : Un employ est forcement une personne Exemple declare pers1 Personne_t := personne_t(' 122222' , ' Dong , ' Tong'' Jing , 10/10/82' );; emp1 Employee_t:= employee_t(' 222222' , ' Dong'' Fei'' , Fei , 10/10/90' ,10000.0); begin pers1 := emp1; end;
Page
141
9. Lien dhritage
I
Page
142
9. Lien dhritage
I
TREAT permet de convertir le type dune expression en un type donn. Il est par exemple possible de convertir les instances dun type de base en des instances de ses sous-type
SELECT TREAT(value(op) as employee_t) FROM o_personne op; TREAT(VALUE(OP)ASEMPLOYEE_T)(NUMINSEE, NOM, PRENOM, DATENAISS, SALAIRE) EMPLOYEE_T(222222, Dong, Fei Fei, 10/10/90, 10000)
Page
143
PLAN
Gnralits Les Types de vues Cration et manipulation de vues normales Cration et manipulation de vues objets Loprateur MAKE_REF Le TRIGGER INSTEAD OFF
Page
144
Gnralits
Les vues sont des objets dfinis partir des tables existantes et/ou des ADTs. Elles permettent :
de masquer la complexit d une requte, d augmenter la scurit des tables de base de masquer des informations certains utilisateurs
Page
145
vue objet : une vue objet est une "table objet virtuelle" dont les instances sont identifies par des OID. Les colonnes d' telle vue sont dfinies sur une un type de l' utilisateur
Page
146
Page
147
Page
148
Exemple de cration d' vue relationnelle partir une d' TABLE OBJET une CREATE OR REPLACE VIEW v_pilote6_nice AS SELECT * FROM pilote6 p6 WHERE p6.adresse.ville =' NICE' ; NOTE : pilote6 est une table objet mais pas la vue v_pilote6_nice
Page
149
Page
150
Page
151
/ -- cration de la vue sur les pilotes CREATE OR REPLACE VIEW o_view_pilote OF r_pilote_t WITH OBJECT IDENTIFIER(pl#) AS SELECT rp.* FROM rPilote8 rp;
Page
152
Page
153
Page
154
SELECT op.plnum, op.nom, op.adr.ville FROM o_view_pilote op; PLNUM 2 NOM Milou TINTIN VILLE Bruxelles
SELECT REF(vp) FROM o_view_pilote vp; REF(VP) 000050030A004CEB0BF16DB42911D2A65100A0245FE FFD0000001426010001000100290000000000090604002A 0007000000200200000000000000001602C1030000000000 0000000000000000000000000000
Page
155
Loprateur MAKE_REF
Loprateur MAKE_REF rend une rfrence vers une ligne d' vue objet si la ligne existe. Dans le cas une contraire rend la prochaine rfrence libre. Il est ncessaire de passer MAKE_REF le nom de la vue et les valeurs des colonnes cls. Syntaxe MAKE_REF (nomVueObjet, key[key, ]) Exemple 1 SELECT MAKE_REF(o_view_pilote , 2) FROM dual; MAKE_REF(o_view_pilote ,2) 000050030A004CEB0BF16DB42911D2A65100A024 5FEFFD0000001426010001000100290000000000090 604002A0007000000200200000000000000001602C1 0300000000000000000000000000000000000000
Page
156
Loprateur MAKE_REF
Exemple 2 SELECT MAKE_REF(o_view_pilote , 3) FROM dual; MAKE_REF(o_view_pilote ,3) 000050030A004CEB0BF16DB42911D2A65100A024 5FEFFD0000001426010001000100290000000000090 604002A0007000000200200000000000000001602C1 0400000000000000000000000000000000000000 Si l' objet identifi par la cl existe c' la rfrence est existante qui est renvoye sinon, une nouvelle rfrence est attribue.
Page
157
Le trigger INSTEAD OF
Le trigger INSTEAD OF permet de mettre jour les tables sous-jascentes une vue Complexe. Ce qui ntait pas possible jusqu' la version 7 d' Oracle Le trigger INSTEAD OF est toujours excut la place de l' ordre SQL sous-jascent(INSERT, UPDATE, DELETE) Exemple
CREATE OR REPLACE TRIGGER tr_update_ville_pil_v INSTEAD OF INSERT ON o_view_pilote DECLARE adr BEGIN UPDATE RPILOTE8 r SET r.adresse.ville = :new.adresse.ville; END; adresse_t;
/
Page
158
PLAN
Gnralits Les LOBs internes Les LOBs externes ou BFILE Les LOBs Locators Le Package DBMS_LOB Informations sur les LOBs Quelques considrations sur les LOBs Contraintes sur les LOBs
Page
159
11. 1 Gnralits
I
Les LOBs : Large Objects ont t introduits par Oracle depuis la version 8.0. Les LOBs sont adapts pour les applications multimdia On distingue deux classes de LOBs : les LOBs internes (CLOB pour Caractre LOB, NCLOB pour National Caractre LOB for the Data Base et BLOB pour Binary LOB) et les LOBs externes BFILEs Les LOBs vont se substituer progressivement aux LONG et LONG RAW La taille d' CLOB ou BLOB est de 4Go un max
Page
160
11. 1 Gnralits
I
Page
161
11. 1 Gnralits
I
162
Ce sont des LOB de type BLOB, CLOB ou NCLOB. Ils sont directement stocks dans la base AU CAS DANS UN SEGMENT SEPARE Un lob peut tre dfini comme tant : un attribut dun ADT, une colonne dune table, une variable SQL, une variable hte d' un programme, une variable PL/SQL, un paramtre ou un rsultat dune fonction Sa structure comprend :Une entte, Un bloc Bitmap Index (chainage), Des blocs Bitmap, Des blocs de donnes.
Page
163
CHUNK 4);
Page
164
Page
165
CACHE/NO CACHE : CACHE permet conserver un LOB souvent accd en mmoire centrale LOGGING/NOLOGGING gnre ou non la trace dans le fichier REDO LOG
Page
166
ENABLE (DISABLE) STORAGE IN ROW : autorise, lorsque les donnes d' LOB sont < 4Ko, un crire directement dans la ligne qui contient le LOB pour des raisons de PERFORMANCE NOTE : les paramtres TABLESPACE, ENABLE (DISABLE)STORAGE IN ROW, CHUNCK ne peuvent tre spcifis qu' la cration d' Table une
Page
167
ALTER TABLE LPILOTE MODIFY LOB (cv_texte) ( CACHE PCTVERSION 20 STORAGE (NEXT 10K) INDEX (STORAGE (next 12K )) );
Page
168
Page
169
Page
170
Le type BFILE (File Based LOB) spcifie que le LOB sera stock en dehors de la base de donnes Oracle. Le systme de fichiers dOracle garde en mmoire le chemin daccs de ce fichier. Les BFILE sont vus comme tant des donnes binaires
Page
171
L objet DIRECTORY
Un nouvel objet appel DIRECTORY , permet ladministration des accs et la manipulation de fichiers. Il permet galement de grer toutes les utilisations des FILEs stocks sur le serveur Oracle. Les privilges autoriss pour l objet DIRECTORY sont : READ, WRITE, DELETE et CREATE DIRECTORY Syntaxe CREATE OR REPLACE DIRECTORY nomDirectory AS ' PathAvecNomFichier' ; NOTE : NomDirectory => nom du rpertoire dans la base
Page
172
Voici les tapes pour installer des objets de type FILE et des objets DIRECTORY :
1. Crer le rpertoire sous l OS (en tant qu utilisateur oracle) et lui donner les accs. 2. Copier les fichiers l intrieur de ce rpertoire. 3. Crer la table oracle contenant le type BFILE. 4. Crer l objet DIRECTORY et lui donner les droits. 5. Insrer les rows de la table en associant le fichier OS.
Page
173
Exemple :
1. Cration du rpertoire sous L' OS mkdir C:\ORA8DATA\DBCOUR\LOB\FILES\; 2. Copier le fichier dans ce rpertoire :
exemple ORACLEGAL3.DOC
3. Crer la table contenant le BFILE CREATE TABLE PROJET( PROJ# ProjNom ProjFile suivre NUMBER(4), VARCHAR2(20), BFILE);
Page
174
Exemple :
4. Crer un objet DIRECTORY CREATE OR REPLACE DIRECTORY bfile_dir AS ' C:\ORA8DATA\DBCOUR\LOB\FILES\' ; 5. Initialiser un BFILE grce la mthode BFILENAME(' nomDirectory'' , nomFichier' ); INSERT INTO projet VALUES(102, ' Objectif lune ' , BFILENAME(' BFILE_DIR' , ' ORACLEGAL3.DOC' )); NOTE :
Pas de vrification de la prsence du fichier en insertion
Page
175
Page
176
Un Lob Locator est un pointeur contenu dans un enregistrement vers les donnes (DATA) d' un LOB externe ou interne.
Sil sagit dun BFILE le Locator est un nom de fichier Sil sagit dun CLOB, BLOB ou NCLOB cest la position de la valeur du LOB dans son segment de donnes
Page
177
Page
178
Page
179
TRIM()
WRITE
Page
180
getLength() instr()
read()
substr()
Page
181
fileGetName()
fileIsOpen() fileOpen()
Page
182
Page
183
La mthode READ
Cette mthode permet de lire des donnes dans les LOB internes ou externes Trois prototypes sont disponibles selon le type de LOB : BLOB, CLOB/NCLOB, BFILE
1. procedure READ(lob_loc IN BLOB, amount IN OUT BINARY_INTEGER, offset IN TEGER, buffer OUT RAW) 2. procedure READ(lob_loc IN CLOB CHARACTER SET ANY_CS, amount IN OUT BINARY_INTEGER, offset IN TEGER, buffer OUT VARCHAR2 CHARACTER SET LOB_LOC%CHARSET) 3. procedure READ(lob_loc IN BFILE, amount IN OUT BINARY_INTEGER, offset IN TEGER, buffer OUT RAW)
Page
184
La mthode READ
les paramtres nom lob_loc amount offset buffer description Locator du LOB lire Quantit des donnes lire Position partir du dbut du CLOB ou BLOB Buffer dans lequel est stock le rsultat
Page
185
La mthode READ
Exemple de lecture d' BLOB un
CREATE OR REPLACE PROCEDURE readCvAnime IS lobCvAnime BLOB; buffer RAW(32767); qte BINARY_INTEGER := 32767; position INTEGER := 1; BEGIN SELECT cv_anime INTO lobCvAnime FROM lpilote WHERE pl#=1; LOOP DBMS_LOB.READ(lobCvAnime, qte, position, buffer); /* Insrer les Manipulations ICI*/ position := position+qte; END LOOP; EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE(' More Data' No ); END; /
Page
186
La mthode READ
Exemple de lecture dans un BFILE
CREATE OR REPLACE PROCEDURE readProjetFile IS bfProjetFile BFILE; buffer RAW(32767); qte BINARY_INTEGER := 32767; position INTEGER := 1; BEGIN SELECT projFile INTO bfProjetFile FROM projet WHERE proj#=102; -- ouverture du fichier (Lecture seule sinon erreur) IF DBMS_LOB.FILEEXISTS(bfProjetFile)=1 THEN DBMS_OUTPUT.PUT_LINE(Fichier Ouvert ! ); DBMS_LOB.FILEOPEN(bfProjetFile, DBMS_LOB.FILE_READONLY); ELSE DBMS_OUTPUT.PUT_LINE(Fichier inexistant); END IF; --position := position+qte; -- suivre
Page
187
La mthode READ
Exemple de lecture d' BFILE un LOOP
DBMS_LOB.READ(bfProjetFile, qte, position, buffer); position := position+qte; /* Insrer les Manipulations ICI*/ END LOOP; EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE(' du LOB' Fin ); DBMS_LOB.FILECLOSE(bfProjetFile); END; /
Page
188
La mthode WRITE
Cette mthode permet d' crire des donnes dans un LOB interne partir d' OFFSET un Deux prototypes sont disponibles selon le type de LOB : BLOB, CLOB/NCLOB, BFILE
1. procedure WRITE(lob_loc IN OUT BLOB, amount IN IN BINARY_INTEGER, offset IN TEGER, buffer IN RAW) 2. procedure WRITE(lob_loc IN OUT CLOB CHARACTER SET ANY_CS, amount IN BINARY_INTEGER, offset IN TEGER, buffer IN VARCHAR2 CHARACTER SET LOB_LOC%CHARSET)
Page
189
La mthode WRITE
les paramtres nom lob_loc amount offset buffer description Locator du LOB interne ou crire Nombre de bytes crire ou crits Position ( partir du dbut du CLOB ou BLOB) partir de laquelle on va crire Buffer contenant les donnes crire
Page
190
La mthode WRITE
Exemple d' criture dans un BLOB
CREATE OR REPLACE PROCEDURE writeCvTexte IS lobCvtexte CLOB; buffer VARCHAR2(32767); qte BINARY_INTEGER := 32767; position INTEGER :=2147483647; BEGIN SELECT cv_texte INTO lobCvTexte FROM lpilote WHERE pl#=12; LOOP -- prparer des donnes dans buffer puis crire -- buffer := ' ya un debut a tout' Il ; DBMS_LOB.WRITE(lobCvTexte, qte, position, buffer); position := position+qte; END LOOP; EXCEPTION WHEN VALUE_ERROR THEN DBMS_OUTPUT.PUT_LINE(' Erreur de Valeurs' ); END; /
Page
191
DESCRIBE DBA_LOBS
Null? NOT NULL NOT NULL NOT NULL NOT NULL NOT NULL Type VARCHAR2(30) VARCHAR2(30) VARCHAR2(400 VARCHAR2(30) VARCHAR2(30) NUMBER NUMBER VARCHAR2(3) VARCHAR2(3) VARCHAR2(3)
Name OWNER TABLE_NAME COLUMN_NAME SEGMENT_NAME INDEX_NAME CHUNK PCTVERSION CACHE LOGGING IN_ROW
Page
192
DESCRIBE DBA_DIRECTORIES
Name OWNER DIRECTORY_NAME DIRECTORY_PATH
I
Page
193
Page
194
Page
195
Le nombre maximum de fichiers BFILE ouverts est contrl via le paramtre d' initialisation
SESSION_MAX_OPEN_FILES=valeur Le dveloppeur doit, s' a ouvert un fichier le il fermer. SINON RISQUE DE DEPASSEMENT du PARAMETRE SESSION_MAX_OPEN_FILES
Page
196
Pas de LOB distribu Pas de chargements de LOB avec SQLLOADER en V8. Utiliser dbms_lob.loadfromfile() Les LOBs ne peuvent apparatre : dans des requtes avec Group by, Order by, select distinct, join.
Page
197
Pas dappel des mthodes du package DBMS_LOB dans le code PL/SQL du poste client Les NCLOBs ne sont pas autoriss dans les types objets
Page
198
12. PL/SQL
I
PLAN
Gnralits Les types Les instances Les collections en PL/SQL Les call out de PL/SQL
Page
199
12. PL/SQL
I
Gnralits
Version disponible du cot du moteur Oracle. les outils de dveloppement ne sont pas encore toujours jour supporte la programmation Orient Objet amliore les performances grce la centralisation du code sur le moteur base de donnes augmente la portabilit
Page
200
Les types
Oracle Objet distingue deux sortes de types :
.Les types dfinis en SQL (types permanents): Les ADT dfinis ce niveau peuvent avoir des mthodes Les types dfinis en PL/SQL (types temporaires) : leur dure de vie est limite l excution du programme.
Page
201
Les types
Dfinition d' type temporaire en PL/SQL un
Les types temporaires sont dfinis grce la commande TYPE. Il sera possible de dfinir des "Types Tables", des Types RECORD, des Types VARRAY et des Types REF CURSOR Les diffrentes Syntaxes TYPE nomType IS VARRAY(limit) OF typeDesElements; TYPE nomType IS TABLE OF typeDesElements ; TYPE nomType IS RECORD (dclarationDesChamps, ); TYPE nomType REF CURSOR OF typeDesElements ; Les lments d' VARRAY ou d' Type table peuvent un un pas tre : BOOLEAN, NCHAR, NVARCHAR2, types objets contenant des types tables ou des VARRAY, des REF CURSOR, des TYPES TABLES ou des VARRAY
Page
202
Les types
Dfinition d' type temporaire en PL/SQL un
Exemple declare TYPE numList_t IS TABLE OF NUMBER; TYPE jourSeamine_t IS VARRAY(7) OF VARCHAR2(13); TYPE tabAdresse_t IS VARRAY(2) OF Adresse_t; TYPE pAdresse_t IS RECORD( Numero NUMBER(4), Rue VARCHAR2(20), Code_Postal NUMBER(5), Ville VARCHAR2(20)); p padresse_t; begin p.numero :=10; end; / NOTE : adresse_t est est type permanent
Page
203
Les instances
1) Instantiation permanente dun ADT -- cration de la table object Adresse CREATE TABLE Adresse OF Adress_t ; -- type abstrait dfini pralablement INSERT INTO Adresse VALUES (1, rue Arago ,06000, NICE ) ; 2) Instantiation temporaire dun ADT DECLARE addr1 adress_t := adress_t (1, rue Arago ,06000, NICE ) ; --avec constructeur addr2 adress_t ; -- a pour valeur NULL BEGIN IF addr2 IS NULL -- VRAI ; addr2.Rue := 5th Avenue ; -- Exception ! END ;
Page
204
Page
205
Cration d une table avec une colonne de type table CREATE TABLE hangar9 ( hangar# avions9 NUMBER(2), avion9_set_t)
Page
206
INSERT INTO hangar9 values (1, avion9_set_t(avion9_t(1, ' Caravelle' , ' Paris'250), avion9_t(2, ' , A300'' , 300))); , Nice' INSERT INTO hangar9 VALUES(2, tabav9); END; /
Page
207
Page
208
13. Import/Export
I
Plan
Gnralits Import/Export et performances Le dictionnaire des donnes Les Exports Les Imports Import/Export de BLOB Divers
Page
209
13.1 Gnralits
I
Les utilitaires Import/Export prennent en compte tous les objets dORACLE OBJET. Si lors dun import/export, il apparat des types objets dans une table, elle sera considre comme oriente objet. Les objets manipuls lors des import/export sont les suivants :
Les ADTs et rfrences d ADT. Les Librairies et fonctions spcifiques. Les LOBs. Les DIRECTORIES. Les Tableaux (ARRAY et VARRAY) . Les Nested Tables.
Page
210
Page
211
Page
212
Les dfinitions de types utilises par une table sont incluses dans l export, uniquement si elles appartiennent au mme schma.
Page
213
OID et Import
Limport prserve les OID des Types , des tables objets et des lignes exportes La valeur de lOID exporte ne doit pas tre diffrente en cas d' export un COMMIT est effectu aprs chaque table exporte En cas de CREATE OR REPLACE limport dtermine le dgr d' utilisation du type et supprime toute les tables qui l' utilesent
Page
214
Ladministrateur doit manuellement se proccuper de la sauvegarde des fichiers binaires externaliss Oracle assure la sauvegarde des Localisations (Locators) des fichiers Binaires
Page
215
13.6 Divers
I
En version objet, il ny a pas de diffrence ou dimpact sur la commande EXPLAIN PLAN. La commande ANALYZE supporte dsormais les extensions lobjet.
De nouvelles syntaxes apparaissent (ANALYZE COLUMN VALIDATE REF).
Page
216
14. CONCLUSION
I
Le modle Objet Relationnel est un compromis entre le modle objet pur et le modle relationnel. Il permet une approche volutive vers l' objet Il est ncessaire ds prsent denvisager la mise en place d' applications tests ou une migration L' option Objet permet d' tendre le noyau Oracle (cartouche : son, image, vido, texte, )
Page
217
15. Exercices
I
PLAN
Objectif du TP Dfinition du schma d' objets PL/SQL et Procdures stockes Insertion des objets Consultation des objets Mise jour des objets Les vues
Page
218
15. Exercices
I
Objectif du TP
Manipuler une base de donnes objet relationnelle Les points que nous visons sont :
concevoir et crer le schma d' base de donnes objet une relationnelle consulter les objets du schma en exploitant entre autre les nouveaux oprateurs tels que TABLE, VALUE, ... effectuer des insertions, mises jour et suppressions dans ce schma en exit Manipuler des objets dans PL/SQL Manipuler les vues objets sur les tables rlationnelles manipuler des objets volumineux
Page
219
15. Exercices
I
# * * * * *
# *
Page
220
15. Exercices
I
type
NUMBER(4) varchar2(15) varray Varchar2(20) number(7,2) CLOB date date number(4) varchar2(30)
Libell
Numro Employ Nom EMPLOYE : En lettre capitales tableau de 4 prnom max Mtier de l employ {Ingnieur, Secrtaire, Directeur, Planton, PDG} Salaire entre 1500 et 15000 CV Date de Naissance Date embauche : doit tre suprieure Date_Naiss Nr. de dpartement doit tre entre 1000 et 9999 Nom du dpartement {Recherche, Resources, Humaines, Marketing, Ventes, Finance} Localisation du dpartement (voir
DEPT
DEPTNO DNAME
LOC
varchar2(30)
NOTE : prendre en compte les contraintes attributs UNIQUE ou OBLIGATOIRE schma page prcdente)
Page
221
15. Exercices
I
Page
222
15. Exercices
I
Page
223
15. Exercices
I
static function getDept (deptno) return boolean; crire une mthode de classe qui affiche pour un DEPT donn, le nom et les prnoms de chaque Employ qui y travaillent. Static function getInfoEmp(deptno) return boolean
Page
224
15. Exercices
I
4. Notes
ces mthodes DOIVENT tre en Lecture seule (PRAGMA RESTRICT_REFERENCES) sauf celles dcrites en 3. dans cette phase, aucune mthode n' encore t a implmente. Il ne s' que des dclarations. agit
Page
225
15. Exercices
I
Page
226
15. Exercices
I
Cration index
Crer un index unique sur la colonne dname de DEPT_o crer un index sur la colonne implicite Nested_table_id de la Nested Table. Peut - il tre unique ?
Page
227
15. Exercices
I
Page
228
15. Exercices
I
Page
229
15. Exercices
I
Les vues
crer une table relationnelle (non objet) DEPT_r. La structure de cette table est celle du type DEPT_t sans les liens Insrer 3 ou 4 objets dans cette table Crer une vue objet DEPT_v masquant toutes les colonnes de cette table. Le type objet associ doit s' appeler old_DEPT_t. Y insrer 2 lignes Crer un trigger INSTEAD OF qui permet d' insrer travers la vue dans la table DEPT_r et DEPT_o Manipuler (insert, update, delete, select) via la vue
Page
230