THE

[45 min]

Soit la séquence d'instructions suivante utilisant la clause THE :

1
INSERT INTO tIntervenant (pknom, prenom, bureau, ltelephones, lspecialites)
2
VALUES (
3
'Dumas', 
4
'Leonard', 
5
typBureau('R','C',123),
6
typListeTelephones(0344234423),
7
typListeSpecialites()
8
);
9
10
INSERT INTO THE (SELECT i.ltelephones FROM tIntervenant i WHERE i.pknom='Dumas')
11
VALUES (0666666666);
12
13
INSERT INTO THE (SELECT i.lspecialites FROM tIntervenant i WHERE i.pknom='Dumas')
14
VALUES (typSpecialite('BD','SGBDR'));
1
DELETE THE (SELECT i.ltelephones FROM tIntervenant i WHERE i.pknom='Dumas') nt
2
WHERE nt.COLUMN_VALUE=0344234423;
1
UPDATE THE (SELECT i.lspecialites FROM tIntervenant i WHERE i.pknom='Dumas') nt
2
SET nt.technologie='SGBDRO'
3
WHERE nt.domaine='BD';

Question

Rétro-concevez le modèle RO permettant les instructions précédentes.

Produisez la syntaxe MLD[1] et SQL[2].

Solution

1
Type typBureau : <centre:char, batiment:char, numero:int>
2
Type typListeTelephones : collection de <entier>
3
Type typSpecialite : <domaine:char, specialite:char>
4
Type typListeSpecialites : collection de <typSpecialite>
5
tIntervenant (#nom:char, prenom:char, bureau:typBureau, ltelephones:typListeTelephones, lspecialites:typListeSpecialites)
1
CREATE OR REPLACE TYPE typBureau AS OBJECT (
2
centre char(2),
3
batiment char(1),
4
numero number(3)
5
);
6
/
7
8
CREATE OR REPLACE TYPE typListeTelephones AS TABLE OF number(10);
9
/
10
11
CREATE OR REPLACE TYPE typSpecialite AS OBJECT (
12
domaine varchar2(15),
13
technologie varchar2(15)
14
);
15
/
16
17
CREATE OR REPLACE TYPE typListeSpecialites AS TABLE OF typSpecialite;
18
/
19
20
CREATE TABLE tIntervenant (
21
pknom varchar2(20) PRIMARY KEY,
22
prenom varchar2(20) NOT NULL,
23
bureau typBureau,
24
ltelephones typListeTelephones,
25
lspecialites typListeSpecialites
26
)
27
NESTED TABLE ltelephones STORE AS tIntervenant_nt1,
28
NESTED TABLE lspecialites STORE AS tIntervenant_nt2;

Question

Rétro-concevez le modèle UML associé.

Solution

UML Intervenant

Question

Que renvoie l'instruction suivante :

1
SELECT i.pknom, s.*, t.* 
2
FROM tIntervenant i, TABLE(i.lspecialites) s, TABLE(i.ltelephones) t 
3
WHERE i.pknom='Dumas'

Indice

Vous dessinerez un tableau avec les entêtes de colonne adéquates.

Solution

1
PKNOM                DOMAINE         TECHNOLOGIE     COLUMN_VALUE
2
-------------------- --------------- --------------- ------------
3
Dumas                BD              SGBDRO             666666666 

Question

Changer le numéro de téléphone de Dumas avec la valeur de votre choix.

Solution

1
UPDATE THE (SELECT i.ltelephones FROM tIntervenant i WHERE i.pknom='Dumas') nt
2
SET nt.COLUMN_VALUE=1111111111;

Le WHERE n'est pas strictement indispensable, étant donné que la base ne contient que Dumas pour le moment ; mais logiquement il est nécessaire pour assurer un fonctionnement correct dans tous les cas.