On continue à l'appeler Trinita
Oracle XMLType (relationnel-XML)
Soit les fichiers XML suivants représentant les personnages des films "Trinita" (1967) et "Trinita est de retour" (1968).
1
2
<personnes>
3
<personne>
4
<nom>Personne</nom>
5
<prenom>Terence</prenom>
6
</personne>
7
<personne>
8
<nom>Trinita</nom>
9
<prenom>Terence</prenom>
10
<age>40</age>
11
</personne>
12
</personnes>
1
2
<personnes>
3
<personne>
4
<nom>Fonda</nom>
5
<prenom>Jack</prenom>
6
<age>53</age>
7
</personne>
8
</personnes>
Soit la table suivante en relationnel-XML : film (#nom:varchar(255), annee:number, pers:XMLType).
Question
Créer une table Oracle correspondant en utilisant XMLType.
Solution
1
CREATE TABLE film (
2
nom VARCHAR(255) PRIMARY KEY,
3
age NUMBER,
4
pers XMLTYPE NOT NULL
5
)
Question
Insérer les données de l'exemple dans la table.
Solution
1
INSERT INTO film VALUES ('Trinita', '1967', XMLType('
2
<personnes>
3
<personne>
4
<nom>Personne</nom>
5
<prenom>Terence</prenom>
6
</personne>
7
<personne>
8
<nom>Trinita</nom>
9
<prenom>Terence</prenom>
10
<age>40</age>
11
</personne>
12
</personnes>
13
'));
14
INSERT INTO film VALUES ('Trinita est de retour', '1968', XMLType('
15
<personnes>
16
<personne>
17
<nom>Fonda</nom>
18
<prenom>Jack</prenom>
19
<age>53</age>
20
</personne>
21
</personnes>
22
'));
23
Question
Écrivez les requêtes SQL, en utilisant XPath, permettant de sélectionner :
tous les noms de tous les personnages
le nom du premier personnage de chaque film
les noms des personnages dont l'age est renseigné
les noms des personnages qui ont plus de 50 ans
Indice
SELECT f.pers.EXTRACT('XPath').GETSTRINGVAL() AS ... FROM film f;
Solution
1
SELECT f.pers.EXTRACT('/personnes/personne/nom').GETSTRINGVAL() AS nom FROM film f;
2
SELECT f.pers.EXTRACT('/personnes/personne[1]/nom').GETSTRINGVAL() AS nom FROM film f;
3
SELECT f.pers.EXTRACT('/personnes/personne[age]/nom').GETSTRINGVAL() AS nom FROM film f;
4
SELECT f.pers.EXTRACT('/personnes/personne[age > 50]/nom').GETSTRINGVAL() AS nom FROM film f;