Вы находитесь на странице: 1из 67

Programmation objet avec Oracle

Chapitre I: Type, tables et objets


Abderrafiaa ELKALAY FSTG Marrakech IRISI 3

Objectifs du chapitre
A la fin de ce chapitre, vous pourrez : dcrire la finalit dune table objet Crer un type objet Crer une table objet Manipuler une table objet

Programmation objet avec Oracle

I.1 Introduction
Ce chapitre prsente, dans un premier temps , les caractristiques du modle objet-relationnel (extension objet du modle relationnel) Dans un second temps nous verrons quelques nouvelles options de SQL et de PLSQL. Les autres chapitres sont consacrs aux nouvelles spcificits objet. Oracle utilise le terme object (tout en utilisant le terme objectrelationnal)

Programmation objet avec Oracle

I.1 Introduction
Le concept table existe toujours dans le modle relationnel objet, mais il est tendu. En effet, la structure dune table objetrelationnelle sera dfinie laide du type.
Chaque enregistrement dune table objet-relationnelle peut tre assimil un objet.

Lobjet sera dot dun OID(object identifier) unique

Programmation objet avec Oracle

I.1 Introduction
Cette extension objet met en uvre diffrentes mcanismes: Les collections : elles regroupent un ensemble dlments du mme type. Le terme collection est un terme gnrique qui englobe les listes, les vecteurs et les tableaux Les rfrences : Cest un pointeur vers un objet ligne. Lidentit des objets est dfinit par lutilisation de rfrences (pointeurs) L hritage: chaque type peut permettre de dfinir plusieurs soustypes Lencapsulation par le programmation de modles (procdures ou fonctions)

Programmation objet avec Oracle

I.2 Type objet


Cette section et les suivantes dcrivent les aspects objets relationnels dOracle

I.2.1 Types de donnes


Les types scalaires conviennent la majorit des applications traditionnelles bases sur les tables relationnels. Les types permettant de construire les objets se trouvent dans la catgorie des types personnaliss

Programmation objet avec Oracle

I.2 Type objet


I.2.2 Persistance
Trois catgories existent sous oracle: Les objets colonnes(column objects) sont stocks en tant que colonne structurs dans une table relationnelle Les objets lignes (row objects) qui sont stocks en tant que lignes dune table objet. Ils possdent un identificateur unique appel OID (Object IDentifier) Et les objets non persistants qui ne sont ni stocks dans une colonne de table relationnelle, ni dans une ligne de table objet. Ils n existent que durant l excution dun programme PL/SQL (Bloc, procdure catalogue ou dclencheur)
Programmation objet avec Oracle 7

I.2 Type objet


Un type doracle peut tre utilis:
Pour la construction dautres types Pour dfinir des tables objet (Object table) Pour dfinir une colonne dune table relationnelle Pour la construction de vues objet (object views)

Programmation objet avec Oracle

I.2 Type objet


Type de donne

Personnaliss (Type)

Intgrs

Scalaires CHAR(n) NCHAR(n) VARCHAR2(n) NVARCHAR2(n) NUMBER(n , p) - DECIMAL DATE BFILE - BLOB - CLOB - NCLOB LONG - LONG - RAW - RAW(n) -ROWID

Collections VARRAY TABLE

Rfrences REF

Programmation objet avec Oracle

I.2 Type objet


I.2.3 Cration dun type
La commande CREATE TYPE comporte trois parties: La premire partie qui dclare la structure du type (chapitre 3 et 4) La deuxime qui dclare les mthodes (chapitre 5)

La troisime qui positionne des types dans une hirarchie d hritage (chapitre 2 )

Programmation objet avec Oracle

10

I.2 Type objet


CREATE[OR REPLACE] TYPE shema [AS OBJECT | UNDER shema.nomsurType]

(
colonne1 type1, colonne2 type2,,

Methode1(parametres 1), Methode2(),

Structure Comportement

)
[[NOT] INSTANTIABLE] [[NOT] FINAL] Relatif lhritage

Programmation objet avec Oracle

11

I.2 Type objet


OR REPLACE permet de recrer le type sil existe dj sans avoir les dtruire (il faut quaucun type ny soit rattach)
AS OBJECT permet de dfinir un type racine dune hirarchie dhritage (si aucune hirarchie dhritage nest dfinir, chaque type est une racine) UNDER dsigne le sur type

Programmation objet avec Oracle

12

I.2 Type objet


Lexemple suivant dcrit le type Pilote_type compos de 4 colonnes au premier niveau. Les colonnes etat_civil_t et adresse_t sont appeles types composants

Pilote_type
Brevet
nom

Etat_civil_t
datnais Nrue

Adresse_t
Rue ville

pays

Programmation objet avec Oracle

13

I.2 Type objet


Le code de cration est le suivant:
CREATE OR REPLACE TYPE etat_civil_type AS OBJECT(nom VARCHAR(30), datenais DATE); / CREATE OR REPLACE TYPE adresse_type AS OBJECT (nrue NUMBER(3), rue VARCHAR(40), ville VARCHAR(30)); / CREATE OR REPLACE TYPE Pilote_type AS OBJECT (brevet CHAR(6), etat_civil_t etat_civil_type, adresse_t adresse_type, pays NUMBER(6,2)); / Le caractre / termine une cration

Programmation objet avec Oracle

14

I.2 Type objet


DESC Pilote_type donne les colonnes au premier niveau SQL > DESC Pilote_type NOM BREVET ETAT_CIVIL_T ADRESSE_T PAYE NULL? TYPE ETAT_CIVIL_TYPE ADRESSE_TYPE NUMBER(6,2)

Programmation objet avec Oracle

15

I.2 Type objet


I.2.4 Restrictions
Lors de la cration dun type il nest pas possible de dfinir des colonnes BOOLEAN,ROWID,LONG, LONG RAW ou utiliser %type Pour linstant il nest pas possible de dfinir dynamiquement des types dans PL/SQL. En revanche, il est possible de manipuler des variables types dans PL/SQL
Il nest pas possible dutiliser un lien de base de donne (database link) pour interroger, insrer ou mettre jour une table distante dpendant ou contenant un type

Programmation objet avec Oracle

16

I.2 Type objet


I.2.5 Dictionnaire des donnes
Des nouvelles vues du dictionnaires des donnes ont t dfinies pour prendre en compte les types

Nous prsentons ici certains vues qui sappliquent tout schma courant sont prfix par USER_
Les vues qui sappliquent tout le schma sont prfix par DBA_ Les vues qui sappliquent un schma courant en incluant les lments hrits par prrogatives sont prfix par ALL_

Programmation objet avec Oracle

17

I.2 Type objet


Nous citerons:
USER_COLL_TYPE USER_INDEXTYPES USER_TYPES USER_TYPES_ATTRS USER_TYPES_METHODS USER_TYPES_VERSIONS dcrit les collections dcrit les index sur les types dcrit les types dcrit les attributs des types dcrit les mthodes des types dcrit les versions des types

Exemples excuter les instructions suivantes sous SQL+ SQL> desc USER_TYPES SQL> select * FROM USER_TYPES SQL> desc USER_TYPES_ATTRS SQL> select * FROM USER_TYPES_ATTRS

Programmation objet avec Oracle

18

I.2 Type objet


I.2.6 Instanciation
La directive NEW permet dinstancier les objets non persistants. Cette mthode invoque un constructeur portant le mme nom (voir chapitre 5). Le code PL/SQL suivant instancie lobjet nonPersistant. La directive dinstanciation s appelle le constructeur du type par defaut. Notez aussi lutilisation des constructeurs par dfaut des types composants (ici etat_civil_type et adresse_type)
DECLARE nonPersistant Pilote_type; BEGUIN nonPersistant := NEW Pilote_type(PL-11 , etat_civil_type(Diffis,05-02-1970), adresse_type(1, G.Brassens ,Blagnac),3500);

Programmation objet avec Oracle

19

I.2 Type objet


Nous allons excuter le code PLSQL suivant et le commenter Mais tout dabord faisons un DESC Pilote_type DECLARE p1 Pilote_type; BEGIN p1 := NEW Pilote_type('PL-11', etat_civil_type('Diffis','05-02-1970'), adresse_type(1,'G. Brassens','Blagnac'),3500) ; p1.brevet := 'PL-12'; p1.adresse_t.rue := 'Camparols'; DBMS_OUTPUT.PUT_LINE('Pilote1 : brevet et rue : '||p1.brevet||' '||p1.adresse_t.rue); END; /

Programmation objet avec Oracle

20

I.2 Type objet


I.2.7 Suppression d un type
La commande DROP dtruit un type: DROP TYPE nom_du_type [FORCE|VALITE]
FORCE permet de forcer la suppression mme si des objets sont rattachs au type. Dans ce cas les objets du type deviennent inaccessible mais ne disparaissent pas. VALITE sapplique seulement aux sous types (types qui hritent du type dtruire), dclenche une vrification pour chaque objet du type dtruit

Programmation objet avec Oracle

21

I.2 Type objet


Lordre respecter pour la destruction du type pilote_type est :
DROP TYPE Pilote_type; DROP TYPE adresse_type; DROP TYPE etat_civil_type;

Programmation objet avec Oracle

22

I.3 Table relationnelle


Avant de se consacrer au monde des tables tudions le mcanisme permettant dutiliser des types au sein de table relationnelles

I.3.1 Syntaxe
La syntaxe simplifie pour la cration dune table relationnelle:
CREATE [GLOBAL TEMPORARY] TABLE [schema] nomTableRelationnelle ( colonne typeDonnes [DAFAUL expression] *contrainteEnLigne + | ,contrainteHorsLigne [,colonnes typeDonnes] ) [ON COMMIT{ DELETE |PRESERVE} ROWS];

Programmation objet avec Oracle

23

I.3 Table relationnelle


Les options sont les suivantes:
GLOBAL TEMPORARY Indique que la table est temporaire. Les donnes sont visibles seulement par les sessions qui insre des donnes dans cette table La structure de ces tables persistent de la mme manire que les tables permanentes. En revanche, la persistance des donnes peut tre programme soit par session soit par transaction laide de loption ON COMMIT.

Programmation objet avec Oracle

24

I.3 Table relationnelle


TypeDonnes Indique un type scalaire (CHAR,DATE) contrainteEnLigne
dsigne une contrainte en ligne traditionnellement dfinie en mme temps que la colonne (in line constraint)

[CONSTRAINT nomContrainte]
{ [NOT] | NULL | UNIQUE | PRIMARY KEY | REFERENCES *schema.+ ,nomTable | nomVue- *(col1*, col2+)+ [ON DELETTE {CASACADE | SET NULL}] | CHECK (condition)

Programmation objet avec Oracle

25

I.3 Table relationnelle


contrainteRefEnLigne
dsigne une contrainte de rfrence (in line ref-constraint), tudie plus en dtail au chapitre 3

contrainteHorsLigne
dsigne une contrainte hors ligne traditionnelle (out of line constraint), tudie plus en dtail au chapitre 3

contrainteRefHorsLigne
dsigne une contrainte de reference hors ligne (out of line refconstraint), tudie plus en dtail au chapitre 3

Programmation objet avec Oracle

26

I.3 Table relationnelle


ON COMMIT
Est valable seulement pour les tables temporaires. Cette option si les donnes doivent persister pendant la dure de la transaction ou pendant la dure de la session DELETTE ROWS (option par dfaut): les donnes nexistent que pendant la transaction et sont dtruites chaque validation par COMMIT PRESERVE ROWS : indique que les donnes persistent durant toute la session, indpendamment des transactions. A la fin de la session elles sont dtruites.

Programmation objet avec Oracle

27

I.3 Table relationnelle


I.3.2 Objet colonne
Les deux dernires colonnes de la table relationnelle suivante son dfinies laide du type pilote_type
DROP TABLE Vols; CREATE TABLE Vols (numero NUMBER, dateVol DATE,nombrePax NUMBER(3), depart VARCHAR(30), arrivee VARCHAR(30), CDB_t Pilote_type, COPI_t Pilote_type, CONSTRAINT pk_Vols PRIMARY KEY(numero));

Excuter la commande desc DESC vols;

Programmation objet avec Oracle

28

I.3 Type relationnel


Instanciation
Lajout dun vol la table vols ncessite lutilisation de deux constructeurs Pilote_type INSERT INTO Vols VALUES (1, SYSDATE, 120, 'Orly-Ouest', 'Blagnac', Pilote_type('PL-11',etat_civil_type('Diffis','05-02-1970'), adresse_type(1,'G. Brassens','Blagnac'),3500) , Pilote_type('CPL-10',etat_civil_type('Mercier','05-12-1947'), adresse_type(5,'Boeldieu','Toulouse'),5600) );

Programmation objet avec Oracle

29

I.3 Type relationnel


Extraction
Affichons les caractristiques du vol avec le nom du commandant de bord. La requte utilise un alias et la notation pointe pour accder des colonnes terminales des objets colonne. SELECT v.numero, v.datevol, v.nombrePax, v.depart, v.arrivee, v.cdb_t.etat_civil_t.nom FROM Vols v ;

Programmation objet avec Oracle

30

I.3 Type relationnel


Valeurs par dfaut
La directive DEFAULT permet dinitialiser les objets colonne CREATE TABLE Vols (numero NUMBER, dateVol DATE,nombrePax NUMBER(3), depart VARCHAR(30), arrivee VARCHAR(30), CDB_t Pilote_type DEFAULT Pilote_type ('PL-1', etat_civil_type('Sigaudes','10-06-1960'), adresse_type(12,'Lasbordes','Balma'), 3500), COPI_t Pilote_type DEFAULT Pilote_type ('PL-2', etat_civil_type('Soutou','05-02-1965'), adresse_type(7,'Camparols','Blagnac'), 3000), CONSTRAINT pk_Vols PRIMARY KEY(numero));

Programmation objet avec Oracle

31

I.3 Type relationnel


Lors dinsertion d enregistrement dans la table et sil nest pas fait mention de l quipage, les objets colonne CDB_t et COPI_t seront initialises aux valeurs par dfaut
Exemple: linsertion suivante fait appel aux valeurs par default pour ces colonnes INSERT INTO Vols (numero, dateVol, nombrePax, depart, arrivee) VALUES (2, SYSDATE, 200, 'Nice', 'Biarritz');

Vrifier le par:
SELECT v.numero, v.depart, v.arrivee, v.cdb_t.etat_civil_t.nom, v.copi_t.etat_civil_t.nom FROM Vols v;

Programmation objet avec Oracle

32

I.3 Type objet


Quoi de plus naturel que de stocker des objets dans des tables. Pour rpondre ce besoin oracles tendu la notion de tables relationnelle la table objet. La directive OF dans linstruction CREATE TABLE permet de spcifier le type qui dcrira les objets stocks dans la table objet

Programmation objet avec Oracle

33

I.3 Type objet


Une table qui dpend dun type (CREATE TABLE nomTableObjet OF nomType) est une table objet. Chaque enregistrement est un objet ligne (row object) . A ce titre chaque objet ligne est muni dun unique OID (Object IDentifier)

Programmation objet avec Oracle

34

I.3 Type objet


I.4.1 Syntaxe
La syntaxe simplifi est la suivante (nous verrons une dfinition plus compltes lors des prochains chapitres):

Programmation objet avec Oracle

35

I.3 Type objet


CREATE [GLOBAL TEMPORARY] TABLE [schema.] nomTableObjet OF [schema.] nomType [( colonne [DAFAUL expression] *contrainteEnLigne + | ,contrainteHorsLigne [,colonnes typeDonnes] ) [ON COMMIT{ DELETE |PRESERVE} ROWS]; [OBJECT IDENTIER IS {SYSTEM GENRATED} PRIMARY KEY] *OIDINDEX *index++

Programmation objet avec Oracle

36

I.3 Type objet


Les options pour la Table relationnelle dj prsentes sont aussi applicables aux tables objet. Les spcificits objet sont les suivantes:
OBJECT IDENTIER IS: indique la mthode de gnration des OID pour les enregistrements de la table (voir chapitre 9, stockage des objets). Cette spcificit contient deux options:

Programmation objet avec Oracle

37

I.3 Type objet


SYSTEM GENRATED est loption par dfaut. Elle prcise que lOID est gnr automatiquement par le systme (sur 16 octets)

PRIMARY KEY prcise que lOID est bas sur la valeur de la cl primaire. Sa taille dpend de la taille de cette cl primaire.

OIDINDEX : cette option est disponible si la table gnre automatiquement ses OID. Elle permet de dclarer un index sur la colonne OID

Programmation objet avec Oracle

38

I.4 Table objet


I.4.2 Contrainte
Dans notre exemple, nous allons dclarer la table objet Pilote de type pilote_type avec des contraintes puis nous stockerons et manipulerons les objets dans cette table. Un type ne peut pas contenir les contraintes (NOT NULL, CHECK, etc). Elles sont dclares au niveau de la table objet.

Programmation objet avec Oracle

39

I.4 Table objet


Table objet Pilote de Pilote_type
brevet etat_civil Adresse_t paye nom datenais nrue rue ville

OID1

PL-11

LACOMBE

05/02/1970

G.Brassens

Blagnac

3500

OID2

CPL-2

LAROCHE

15/12/1963

Foch

Montaub an

2600

OID3

CPL- 3

LABAT

25/12/1965

Camparol

Pau

300

Programmation objet avec Oracle

40

I.4 Table objet


La syntaxe suivante dfinit une table objet avec ses contraintes:
La contrainte PRIMARY KEY dclare la cl primaire La contrainte CHECK imposent des domaines de valeurs La contrainte UNIQUE empche les doublons

Notons quil aussi possible dajouter, de supprimer , de dsactiver ou de ractiver des contraintes sur des tables objets laide de la commande ALTER TABLE de la mme manire que pour les tables relationnelles.

Programmation objet avec Oracle

41

I.4 Table objet


CREATE TABLE Pilote OF Pilote_type (CONSTRAINT pk_Pilote PRIMARY KEY(brevet), CONSTRAINT df_paye paye DEFAULT 3000, CONSTRAINT nn_paye CHECK (paye IS NOT NULL), CONSTRAINT ck_paye CHECK (paye BETWEEN 2000 AND 5000), CONSTRAINT nn_nom CHECK (etat_civil_t.nom IS NOT NULL), CONSTRAINT un_nom UNIQUE (etat_civil_t.nom) );

Programmation objet avec Oracle

42

I.4 Table objet


I.4.3 Dictionnaire de donne
Les vues du dictionnaires de donnes USER_OBJECT_TABLES et ALL_OBJECT_TABLES dcrivent les tables objets Excuter SQL> SELECT TABLE_NAME, OBJECT_ID_TYPE, TABLE_TYPE_OWNER, TABLE_TYPE FROM USER_OBJECT_TABLES;

Programmation objet avec Oracle

43

I.4 Table objet


I.4.4 Instanciation
Ce paragraphe traite des objets ligne (row object) qui sont des objets stocks en tant que ligne dune table objet (dont les valeurs occupent toutes les colonnes). Ces objets sont instancis laide de la commande INSERT appliqus une table objet Les objets colonne sont les objets qui noccupent pas tous les champs de la table La diffrence entre ligne et colonne est que la ligne possde un OID alors que la colonne non

Programmation objet avec Oracle

44

I.4 Table objet


Exemple: le script SQL suivants insere 3 objets INSERT INTO Pilote VALUES (Pilote_type('PL-11', etat_civil_type('Lacombe','05-02-1970'), adresse_type(1,'G. Brassens','Blagnac'),3500)); INSERT INTO Pilote VALUES (Pilote_type('CPL-2', etat_civil_type('Laroche','15-12-1963'), adresse_type(2,'Foch','Montauban'),2600); INSERT INTO Pilote VALUES ('CPL-3', etat_civil_type('Labat','25-12-1965'), adresse_type(3,'Camparols','Pau'),3000);

Programmation objet avec Oracle

45

I.4 Table objet


I.4.5 A propos des OID
Dans un environnement centralis (quand les tables objet ne sont pas rparties ),Il est prfrable dutiliser la cl primaire comme OID. Le chapitre dtaille la composition et lutilisation des OID:

Programmation objet avec Oracle

46

I.4 Table objet


OID bass sur la cl primaire
Pour que les OID doivent tre bass sur la cl primaire de la table, il faut opter pour loption PRIMARY KEY comme le montre linstruction suivante:

CREATE TABLE Pilote OF Pilote_type (CONSTRAINT pk_Pilote PRIMARY KEY(brevet), Autrescontraintes) OBJET IDENTIFIER IS PRIMARY KEY;

Programmation objet avec Oracle

47

I.4 Table objet


La colonne OBJECT_ID_TYPE de la vue USER_OBJECT_TABLES permet de retrouver la mthode de gnration de lOID: Excuter SQL> SELECT TABLE_NAME, OBJECT_ID_TYPE, TABLE_TYPE FROM USER_OBJECT_TABLES;

Programmation objet avec Oracle

48

I.4 Table objet


Index sur OID
Si un index doit tre declar sur un OID de la meme table objet, il faut opter pour loption OIDINDEX comme le montre lexemple suivant: CREATE TABLE Pilote OF Pilote_type (CONSTRAINT pk_Pilote PRIMARY KEY(brevet), OBJECT IDENTIFIER IS SYSTEM GENERATED OIDINDEX index_OID_Pilote (STORAGE (INITIAL 100K NEXT 50K MINEXTENTS 1 MAXEXTENTS 50 PCTINCREASE 5));

Programmation objet avec Oracle

49

I.4 Table objet


Visualisation Le chapitre 3 dcrit l instruction SELECT pour construire des requtes de visualisation La directive REF permet d extraire une reference. La requte suivante extrait les OID des objets de la table Pilote:

SQL>SELECT REF(p), p.brevet, p.etat_civil_t.nom FROM Pilote p;

Programmation objet avec Oracle

50

I.4 Table objet


I.4.6 Manipulation des objets
On modifie par la commande UPDATE et on supprime par la commande DELETE. Dans les deux cas on doit utiliser un alias afin de parcourir les structures de donnes plusieurs niveaux Exemple : crire un script pour modifier le nom et la paye du premier pilote, et pour supprimer aussi les pilotes ne rsidant pas Blagnac

Programmation objet avec Oracle

51

I.4 Table objet


SQL> UPDATE Pilote p SET p.etat_civil_t.nom = 'Sigaudes', p.paye=3700 WHERE brevet = 'PL-11'; -SQL> DELETE FROM Pilote p WHERE NOT (p.adresse_t.ville = 'Blagnac');

Programmation objet avec Oracle

52

I.4 Table objet


Chargement dun objet (VALUE)
La fonction SQL VALUE (alias) renvoie un contenue sous la forme dun type La requete suivante extrait un objet charg partir de la table pilote. Ce rsultat est diffrent de la deuxime extraction ( lutilisation de *) qui ne construit quun ensemble de valeur: SQL> SELECT VALUE(ap) FROM Pilote ap WHERE ap.brevet = 'PL-11'; SQL> SELECT * FROM Pilote WHERE brevet = 'PL-11';
Programmation objet avec Oracle 53

I.4 Table objet


Le bloc PL/SQL suivant charge les donnes dans un objet non persistant (variable var_pilote) L objet non persistant doit etre manipul par la notation pointe.
DECLARE var_pilote Pilote_type; BEGIN SELECT VALUE(ap) INTO var_pilote FROM Pilote ap WHERE ap.brevet = 'PL-11'; IF (var_pilote.etat_civil_t.nom = 'Sigaudes') THEN DBMS_OUTPUT.PUT_LINE('Sigaudes est trouv! sa paye : ' || TO_CHAR(var_pilote.paye)); END IF; END;
/
Programmation objet avec Oracle 54

I.4 Table objet


Directive %TYPE
La directive SQL%TYPE s applique une colonne dune table . Elle est utilise pour dclarer une variable dans PL/SQL DECLARE varBrevet Pilote.brevet%TYPE; varRue Pilote.adresse_t.rue%TYPE; varNom Pilote.etat_civil_t.nom%TYPE; BEGIN varBrevet := 'PL-5'; varRue := 'Port-Royal'; varNom := 'Bidal'; END; /
Programmation objet avec Oracle 55

I.4 Table objet


I.4.7 Valeurs NULL
Un objet non persistant, un objet colonne , une collection un lment dune collection peut tre explicitement initialis NULL (implicitement sil n a pas t initialis) Un Objet ligne ne peut tre pas initialis NULL Un objet initialis NULL (est dit atomically null) est diffrent du mme objet ayant toutes ses colonnes vide. Le premier est dit objet vide. Le second est dit objet nul

Programmation objet avec Oracle

56

I.4 Table objet


Objets non persistants
Dans le bloc suivant, lobjet colonne adresse de lobjet non persistant p1 est nul (tous ses champs valent null). La mise jours de ladresse p1 est possible Lobjet colonne adresse de lobjet non persistant p2 est vide. La mise jours de ladresse p2 nest pas possible
DECLARE p1 Pilote_type; p2 Pilote_type; BEGIN p1 := NEW Pilote_type('PL-1,etat_civil_type(Bidal',16-01-1965') , adresse_type(NULL, NULL, NULL),3000) ; p2 := NEW Pilote_type('PL-1, etat_civil_type(Bidal',16-01-1965'), NULL,3000) ; END; /

Programmation objet avec Oracle

57

I.4 Table objet


Objets colonne Comme le montre l exemple suivant la modification de la colonne adresse du premier cas est possible. Dans le second cas ca ne sera pas possible. En effet on ne peu pas accder un objet vide. INSERT INTO Pilote VALUES ( 'PL-1,etat_civil_type(Bidal',16-01-1965') , adresse_type(NULL, NULL, NULL),3000) ; INSERT INTO Pilote VALUES ('PL-1, etat_civil_type(Bidal',16-01-1965'), NULL,3000);
Programmation objet avec Oracle 58

I.4 Table objet


I.4.8 INDEX Comme pour les tables relationnelles, on peut crer un index pour une table Objet Nous verrons quon peut indexer des collections (voir chap 4 et 9) -- table relationnelle Vols CREATE INDEX idx_r_nomPilote ON Vols (CDB_t.etat_civil_t.nom); -- table objet Pilote CREATE INDEX idx_o_villePilote ON Pilote (adresse_t.ville);

Programmation objet avec Oracle

59

I.4 Table objet


I.4.9 Dclencheurs (Triggers) Il est possible de dfinir un ou plusieurs dclencheurs sur une table objet Nous tudierons par ailleurs un nouveau type de dclencheurs (INSTEAD OF) qui permettent la mise jour de vue multi tables (voir chapitre 8) Lexemple suivant dcrit un dclencheur programm sur la table objet PILOTE. Ce dclencheur insre un enregistrement dans la table trace chaque nouveau pilote domicili Blagnac et n le 05-02-1965 ou le 16-01-1965 La condition WHEN filtre les objets et vite ainsi de tester la condition sur la ville (instruction IF dans le corps du dclencheur) L accs aux valeurs dun nouvel objet dans le corps du dclencheur ou dans la condition est not par la directive NEW

Programmation objet avec Oracle

60

I.4 Table objet


CREATE TABLE Trace (ligne VARCHAR(80)); CREATE TRIGGER trig_o_Pilote1 AFTER INSERT ON Pilote FOR EACH ROW WHEN ( NEW.adresse_t.ville = 'Blagnac' ) BEGIN IF ( :NEW.etat_civil_t.datenais = '05-02-1965' OR :NEW.etat_civil_t.datenais = '16-01-1965') THEN INSERT INTO trace VALUES ('Pilote : '|| :NEW.brevet || ' est de Blagnac et son anniversaire concorde...'); END IF; END; /

Programmation objet avec Oracle

61

I.4 Table objet


CREATE TABLE Trace (ligne VARCHAR(80)); CREATE TRIGGER trig_o_Pilote1 AFTER INSERT ON Pilote FOR EACH ROW WHEN ( NEW.adresse_t.ville = 'Blagnac' ) BEGIN IF ( :NEW.etat_civil_t.datenais = '05-02-1965' OR :NEW.etat_civil_t.datenais = '16-01-1965') THEN INSERT INTO trace VALUES ('Pilote : '|| :NEW.brevet || ' est de Blagnac et son anniversaire concorde...'); END IF; END; /

Programmation objet avec Oracle

62

I.4 Table objet


Le code suivant instancie un objet de la table objet PILOTE qui dclenche une insertion dans la table trace SELECT * FROM Trace; INSERT INTO Pilote VALUES ('CPL-4',etat_civil_type('Sery','16-01-1965'), adresse_type(3,'Hoche','Blagnac'),3400); SELECT * FROM Trace;

Programmation objet avec Oracle

63

I.4 Table objet


I.4.10 Extraction dobjets
Toutes les fonctionnalits relationnelles de l instruction SELECT sont applicables aux tables objets.

Ainsi, il est possible dutiliser les directives suivantes : DISTINCT , ORDER BY, GROUP BY,MINUS,UNION.
Les chapitres 3,4 et 6 dcrivent les spcificits de l instruction SELECT pour manipuler les rfrences, les collections et les mthodes.

Programmation objet avec Oracle

64

I.4 Table objet


Elments de la clause FROM
Depuis la version 8 (1997), la clause FROM dune requte peut contenir une instruction SELECT. Considrons la table Pilote, la requte suivante fournit la rpartition en pourcentage des pilotes par compagnie:
SELECT aliasCompa.compagnie,aliasCompa.nbPil/aliasPil.total*100 "%Pilotes" FROM (SELECT compagnie, COUNT(*) nbPil FROM Pilote GROUP BY compagnie) aliasCompa, (SELECT COUNT(*) total FROM Pilote) aliasPil;

Programmation objet avec Oracle

65

I.4 Table objet


I.4.11Supression dune table objet
La suppression dune table objet par la commande DROP TABLE entraine la suppression des objets stocks, des privilges, des index Si vous voulez seulement supprimer les objets dune table et viter tous ces effets de bord, vous pouvez utiliser la commande TRUNCATE TABLE. Attention, il nest pas possible dannuler un ordre DROP TABLE par ROLLBACK

Programmation objet avec Oracle

66

I.4 Table objet


Pour dtruire un schma entier, il faut commencer par supprimer les tables objet puis les types associs et pas linverse, on doit dabord les supprimer les tables puis les types associs: DROP TABLE Pilote; DROP TYPE Pilote_type; DROP TYPE adresse_type; DROP TYPE etat_civil_type

Programmation objet avec Oracle

67

Вам также может понравиться

  • Maitrisez La Configuration Apache Tomcat Sous Linux
    Maitrisez La Configuration Apache Tomcat Sous Linux
    От Everand
    Maitrisez La Configuration Apache Tomcat Sous Linux
    Оценок пока нет
  • Électre
    Électre
    От Everand
    Électre
    Оценок пока нет
  • Tp5 - Oracle Objet
    Tp5 - Oracle Objet
    Документ22 страницы
    Tp5 - Oracle Objet
    malak djellouli
    Оценок пока нет
  • Oracle PL SQL
    Oracle PL SQL
    Документ7 страниц
    Oracle PL SQL
    Ach Ouaek
    Оценок пока нет
  • Cours Soa
    Cours Soa
    Документ26 страниц
    Cours Soa
    Kalilou Berthe
    Оценок пока нет
  • PL SQL Partie 5 Proc Func Pack 2020
    PL SQL Partie 5 Proc Func Pack 2020
    Документ28 страниц
    PL SQL Partie 5 Proc Func Pack 2020
    Abdou Sadik
    Оценок пока нет
  • Cours POO2
    Cours POO2
    Документ47 страниц
    Cours POO2
    Remix Mixdox
    Оценок пока нет
  • Sans Titre PDF
    Sans Titre PDF
    Документ50 страниц
    Sans Titre PDF
    Źéý Ñêb
    Оценок пока нет
  • ABCL
    ABCL
    Документ21 страница
    ABCL
    Alti Adel
    Оценок пока нет
  • 2.5.2.4 Lab - Install A Virtual Machine On A Personal Computer
    2.5.2.4 Lab - Install A Virtual Machine On A Personal Computer
    Документ3 страницы
    2.5.2.4 Lab - Install A Virtual Machine On A Personal Computer
    Mistake Ivanovic
    Оценок пока нет
  • Les 08
    Les 08
    Документ22 страницы
    Les 08
    Sahar Anajjar
    Оценок пока нет
  • TP 4 Heritage
    TP 4 Heritage
    Документ2 страницы
    TP 4 Heritage
    Adil Soufi
    Оценок пока нет
  • 8 XQuery
    8 XQuery
    Документ54 страницы
    8 XQuery
    Hajji Youssef
    Оценок пока нет
  • Oracle:: Architecture Et Concepts de Base
    Oracle:: Architecture Et Concepts de Base
    Документ131 страница
    Oracle:: Architecture Et Concepts de Base
    SAFAE BELKHYR
    Оценок пока нет
  • POC - Rappels Java - TD 2 - Héritage Et Polymorphisme
    POC - Rappels Java - TD 2 - Héritage Et Polymorphisme
    Документ5 страниц
    POC - Rappels Java - TD 2 - Héritage Et Polymorphisme
    Fode
    Оценок пока нет
  • IntraWeb Tutorial - French
    IntraWeb Tutorial - French
    Документ53 страницы
    IntraWeb Tutorial - French
    Acosta
    Оценок пока нет
  • Java WEB
    Java WEB
    Документ17 страниц
    Java WEB
    mariembmg
    Оценок пока нет
  • TP Ps
    TP Ps
    Документ6 страниц
    TP Ps
    anwer.hedfi
    Оценок пока нет
  • Cours Oracle19c
    Cours Oracle19c
    Документ15 страниц
    Cours Oracle19c
    M
    Оценок пока нет
  • Chapitre 4: Algèbre de Boole Et Portes Logiques
    Chapitre 4: Algèbre de Boole Et Portes Logiques
    Документ59 страниц
    Chapitre 4: Algèbre de Boole Et Portes Logiques
    youssef 122
    Оценок пока нет
  • Cours 5 - 5 PHP
    Cours 5 - 5 PHP
    Документ11 страниц
    Cours 5 - 5 PHP
    asma
    Оценок пока нет
  • Chap2 DTD
    Chap2 DTD
    Документ37 страниц
    Chap2 DTD
    Soukaina El Onsal
    100% (1)
  • Administration Basique D'une Base de Données Oracle
    Administration Basique D'une Base de Données Oracle
    Документ64 страницы
    Administration Basique D'une Base de Données Oracle
    Abdo Abdo
    Оценок пока нет
  • TP Servlet 2010
    TP Servlet 2010
    Документ11 страниц
    TP Servlet 2010
    Zakaria Igarramen
    Оценок пока нет
  • UML Séances 1 - 2
    UML Séances 1 - 2
    Документ34 страницы
    UML Séances 1 - 2
    Mohamed Sadek
    Оценок пока нет
  • Cours Delphi 2
    Cours Delphi 2
    Документ84 страницы
    Cours Delphi 2
    Desi Desi
    100% (1)
  • 02-Présentation Servlet
    02-Présentation Servlet
    Документ17 страниц
    02-Présentation Servlet
    khaoula fattah
    Оценок пока нет
  • Cours PHP Poo
    Cours PHP Poo
    Документ8 страниц
    Cours PHP Poo
    Abdoulaye Gueye
    Оценок пока нет
  • 01-Présentation de Java EE
    01-Présentation de Java EE
    Документ13 страниц
    01-Présentation de Java EE
    khaoula fattah
    Оценок пока нет
  • Chapitre3 Connection BD PDF
    Chapitre3 Connection BD PDF
    Документ53 страницы
    Chapitre3 Connection BD PDF
    Arbia Rh
    Оценок пока нет
  • Som Maire
    Som Maire
    Документ12 страниц
    Som Maire
    Imy Yag
    Оценок пока нет
  • Cours JDBC Dao
    Cours JDBC Dao
    Документ18 страниц
    Cours JDBC Dao
    Zèkiya Saadaoui
    100% (1)
  • Ch3 DefinitionClasseObjet
    Ch3 DefinitionClasseObjet
    Документ60 страниц
    Ch3 DefinitionClasseObjet
    Mariem Makhlouf
    Оценок пока нет
  • Chp4-Bases de Données NOSQL
    Chp4-Bases de Données NOSQL
    Документ85 страниц
    Chp4-Bases de Données NOSQL
    Arnauld
    Оценок пока нет
  • TP4 Oracle
    TP4 Oracle
    Документ3 страницы
    TP4 Oracle
    El Moumne Nihal
    Оценок пока нет
  • Cous PLSQL
    Cous PLSQL
    Документ159 страниц
    Cous PLSQL
    Imane Rachid
    Оценок пока нет
  • Rapport
    Rapport
    Документ31 страница
    Rapport
    Wissal Ennajah
    Оценок пока нет
  • SQL Sous Oracle Serie 1
    SQL Sous Oracle Serie 1
    Документ3 страницы
    SQL Sous Oracle Serie 1
    Brazza In My Veins
    100% (1)
  • TP1-Environement de Développement
    TP1-Environement de Développement
    Документ14 страниц
    TP1-Environement de Développement
    Mouhamed Bouazzi
    Оценок пока нет
  • Cours POO JAVA PARTIE1
    Cours POO JAVA PARTIE1
    Документ95 страниц
    Cours POO JAVA PARTIE1
    Oussama Rachik
    Оценок пока нет
  • Semaine 1
    Semaine 1
    Документ53 страницы
    Semaine 1
    aymen.ayari
    Оценок пока нет
  • PHP Laravel BD
    PHP Laravel BD
    Документ32 страницы
    PHP Laravel BD
    Alioune
    Оценок пока нет
  • Delphi - Tp08case À Cocher
    Delphi - Tp08case À Cocher
    Документ6 страниц
    Delphi - Tp08case À Cocher
    MayaLabelle
    Оценок пока нет
  • Delphi 2010 WP DataSnap FR
    Delphi 2010 WP DataSnap FR
    Документ65 страниц
    Delphi 2010 WP DataSnap FR
    Habib Bedouin Bensafi
    Оценок пока нет
  • Programmation Orientée Objet JAVA V1.0
    Programmation Orientée Objet JAVA V1.0
    Документ46 страниц
    Programmation Orientée Objet JAVA V1.0
    Mina Mint Chighali
    100% (1)
  • Cours SQL - Doc Maitre PDF
    Cours SQL - Doc Maitre PDF
    Документ46 страниц
    Cours SQL - Doc Maitre PDF
    NoraRida
    Оценок пока нет
  • Chapitre 6 - Langage HiveQL de Apache Hive
    Chapitre 6 - Langage HiveQL de Apache Hive
    Документ85 страниц
    Chapitre 6 - Langage HiveQL de Apache Hive
    Khalid Harrati
    Оценок пока нет
  • PHP 05 MVC
    PHP 05 MVC
    Документ18 страниц
    PHP 05 MVC
    abdrahim el mellaqui
    Оценок пока нет
  • Développer Avec Hibernate Et Spring
    Développer Avec Hibernate Et Spring
    Документ1 страница
    Développer Avec Hibernate Et Spring
    imane
    Оценок пока нет
  • Ihm1 FX 04 Man
    Ihm1 FX 04 Man
    Документ64 страницы
    Ihm1 FX 04 Man
    Beaurel Fohom
    Оценок пока нет
  • Séance3 Gestion - Panneaux
    Séance3 Gestion - Panneaux
    Документ3 страницы
    Séance3 Gestion - Panneaux
    Lamiss Ghoul
    Оценок пока нет
  • Chapitre3-BasesDeDonnées Nosql
    Chapitre3-BasesDeDonnées Nosql
    Документ15 страниц
    Chapitre3-BasesDeDonnées Nosql
    Nesrine Jouini
    Оценок пока нет
  • Bda2 Cours1 FR Slides
    Bda2 Cours1 FR Slides
    Документ39 страниц
    Bda2 Cours1 FR Slides
    Ahmed Chaouki CHAOUCHE
    Оценок пока нет
  • Examen VB
    Examen VB
    Документ4 страницы
    Examen VB
    Dhekra Najar
    Оценок пока нет
  • Architecture Oracle 10 G
    Architecture Oracle 10 G
    Документ124 страницы
    Architecture Oracle 10 G
    Mohamed Othmani
    100% (1)
  • Petit Guide de SQL Plus
    Petit Guide de SQL Plus
    Документ33 страницы
    Petit Guide de SQL Plus
    Samir Algeriano
    Оценок пока нет
  • Tp1: Installation de L'Apache Spark: Lebutdecetp
    Tp1: Installation de L'Apache Spark: Lebutdecetp
    Документ4 страницы
    Tp1: Installation de L'Apache Spark: Lebutdecetp
    tabbabi marwen
    Оценок пока нет
  • Introduction Au Data Entity Framework
    Introduction Au Data Entity Framework
    Документ15 страниц
    Introduction Au Data Entity Framework
    BOUZAZI
    Оценок пока нет
  • Base de Donner Avec Delphi
    Base de Donner Avec Delphi
    Документ10 страниц
    Base de Donner Avec Delphi
    Haythem Ferjani
    Оценок пока нет
  • Cours JAVA Chapitre N°1 PDF
    Cours JAVA Chapitre N°1 PDF
    Документ64 страницы
    Cours JAVA Chapitre N°1 PDF
    hamza maaroufi
    Оценок пока нет
  • Sogeti France LivreBlancCloudComputing
    Sogeti France LivreBlancCloudComputing
    Документ24 страницы
    Sogeti France LivreBlancCloudComputing
    Frederic Culie
    Оценок пока нет
  • BDOO Ch1 Type Table Objet
    BDOO Ch1 Type Table Objet
    Документ67 страниц
    BDOO Ch1 Type Table Objet
    Mounir Quatra
    Оценок пока нет
  • Fragmentation Oracle
    Fragmentation Oracle
    Документ20 страниц
    Fragmentation Oracle
    Mounir Quatra
    Оценок пока нет
  • Uml 2
    Uml 2
    Документ49 страниц
    Uml 2
    Soufian Ennassiri
    Оценок пока нет
  • Cours Uml
    Cours Uml
    Документ75 страниц
    Cours Uml
    Faiçal Tabouti
    Оценок пока нет
  • Unified Modeling Language (Uml)
    Unified Modeling Language (Uml)
    Документ28 страниц
    Unified Modeling Language (Uml)
    Mounir Quatra
    Оценок пока нет
  • Uml 2
    Uml 2
    Документ49 страниц
    Uml 2
    Soufian Ennassiri
    Оценок пока нет
  • XFB Monitor CFT Codes Diagnostics Messages 2 4 1 FRA
    XFB Monitor CFT Codes Diagnostics Messages 2 4 1 FRA
    Документ160 страниц
    XFB Monitor CFT Codes Diagnostics Messages 2 4 1 FRA
    Emilio Cabaleiro
    0% (1)
  • 2015 04 25 Chapitre 5 Les Procedures Stockees PL-SQL
    2015 04 25 Chapitre 5 Les Procedures Stockees PL-SQL
    Документ5 страниц
    2015 04 25 Chapitre 5 Les Procedures Stockees PL-SQL
    Anonh Adiko
    Оценок пока нет
  • TD6 Transaction
    TD6 Transaction
    Документ2 страницы
    TD6 Transaction
    Rim Chebbi
    100% (1)
  • Cours Qsig Mbujimayi Istia 2013-2014
    Cours Qsig Mbujimayi Istia 2013-2014
    Документ65 страниц
    Cours Qsig Mbujimayi Istia 2013-2014
    Desire Kabamba
    Оценок пока нет
  • Memoire Ahmed
    Memoire Ahmed
    Документ2 страницы
    Memoire Ahmed
    ahmed
    Оценок пока нет
  • TP Anova
    TP Anova
    Документ12 страниц
    TP Anova
    Aurel Attere
    Оценок пока нет
  • DEv X3
    DEv X3
    Документ232 страницы
    DEv X3
    Fihri Abdellah
    Оценок пока нет
  • Séance1 TP Spss
    Séance1 TP Spss
    Документ4 страницы
    Séance1 TP Spss
    Bob
    Оценок пока нет
  • NT CPA SLM 24219 SAP BW-Reorganisation Oracle DBM
    NT CPA SLM 24219 SAP BW-Reorganisation Oracle DBM
    Документ18 страниц
    NT CPA SLM 24219 SAP BW-Reorganisation Oracle DBM
    jpaugert
    Оценок пока нет
  • Devoir de Contrôle N3 4éco3
    Devoir de Contrôle N3 4éco3
    Документ3 страницы
    Devoir de Contrôle N3 4éco3
    Kaydo amv
    Оценок пока нет
  • TD5 Algo Rappels Chaines C
    TD5 Algo Rappels Chaines C
    Документ5 страниц
    TD5 Algo Rappels Chaines C
    ACHRAF EL MESSAOUDI
    Оценок пока нет
  • Truc Et Astuce Delphi PDF
    Truc Et Astuce Delphi PDF
    Документ8 страниц
    Truc Et Astuce Delphi PDF
    hidouche2014
    Оценок пока нет
  • Linux - Chap2 - Systeme de Fichiers
    Linux - Chap2 - Systeme de Fichiers
    Документ44 страницы
    Linux - Chap2 - Systeme de Fichiers
    Doudou Faye
    Оценок пока нет
  • A Poly BDR 2010
    A Poly BDR 2010
    Документ36 страниц
    A Poly BDR 2010
    Anonymous Wpl47Bwu4
    Оценок пока нет
  • Gestion de Production-Exercice
    Gestion de Production-Exercice
    Документ5 страниц
    Gestion de Production-Exercice
    zakariyaahlsidibrahim
    Оценок пока нет
  • Demarrage Et Arret Instance
    Demarrage Et Arret Instance
    Документ18 страниц
    Demarrage Et Arret Instance
    lok lok
    Оценок пока нет
  • 1 ELFADDOULI BigData HDFS 2022
    1 ELFADDOULI BigData HDFS 2022
    Документ22 страницы
    1 ELFADDOULI BigData HDFS 2022
    abdou boulif
    Оценок пока нет
  • QCM Linux
    QCM Linux
    Документ20 страниц
    QCM Linux
    Hidaya kettani
    100% (1)
  • Oracle Database FR
    Oracle Database FR
    Документ54 страницы
    Oracle Database FR
    Khardiata NDIAYE
    Оценок пока нет
  • Les Sauvgardes
    Les Sauvgardes
    Документ22 страницы
    Les Sauvgardes
    أنيسة أباعبيدة
    Оценок пока нет
  • No SQL
    No SQL
    Документ69 страниц
    No SQL
    HIND GUENDOUZ
    Оценок пока нет
  • CM-DW Olap
    CM-DW Olap
    Документ63 страницы
    CM-DW Olap
    ngombe emmanuel
    Оценок пока нет
  • Archivage Electronique
    Archivage Electronique
    Документ20 страниц
    Archivage Electronique
    brymmaimounatou
    Оценок пока нет
  • Juno SlidesCarnival
    Juno SlidesCarnival
    Документ43 страницы
    Juno SlidesCarnival
    Maria Boulefaa
    Оценок пока нет
  • Bda2023 TP0
    Bda2023 TP0
    Документ5 страниц
    Bda2023 TP0
    mustapha M
    Оценок пока нет
  • AdministrationBDDD - Cours
    AdministrationBDDD - Cours
    Документ82 страницы
    AdministrationBDDD - Cours
    Wilfreed Minfoundi Manguele
    Оценок пока нет
  • Conception Base de Données - Approche MERISE
    Conception Base de Données - Approche MERISE
    Документ103 страницы
    Conception Base de Données - Approche MERISE
    Hamed Baba
    Оценок пока нет
  • Guide Des Opérations
    Guide Des Opérations
    Документ402 страницы
    Guide Des Opérations
    Yassine KAMAREZZAMAN
    Оценок пока нет
  • M1105 tp3 Corr
    M1105 tp3 Corr
    Документ3 страницы
    M1105 tp3 Corr
    lasollo
    Оценок пока нет