T'as le bonjour de Trinita
Oracle XMLType (table XML)
Soit les fichiers XML suivants représentant des films.
1
<film>
2
<nom>Trinita</nom>
3
<annee>1967</annee>
4
<personnes>
5
<personne>
6
<nom>Personne</nom>
7
<prenom>Terence</prenom>
8
</personne>
9
<personne>
10
<nom>Trinita</nom>
11
<prenom>Terence</prenom>
12
<age>40</age>
13
</personne>
14
</personnes>
15
</film>
1
<film>
2
<nom>Trinita est de retour</nom>
3
<annee>1968</annee>
4
<personnes>
5
<personne>
6
<nom>Fonda</nom>
7
<prenom>Jack</prenom>
8
<age>53</age>
9
</personne>
10
</personnes>
11
</film>
Question
Créer une table XML sous Oracle pour accueillir ces fichiers XML.
Solution
1
CREATE TABLE film OF XMLTYPE;
Question
Insérer les données de l'exemple dans la table.
Solution
1
INSERT INTO film VALUES (XMLType('
2
<film>
3
<nom>Trinita</nom>
4
<annee>1967</annee>
5
<personnes>
6
<personne>
7
<nom>Personne</nom>
8
<prenom>Terence</prenom>
9
</personne>
10
<personne>
11
<nom>Trinita</nom>
12
<prenom>Terence</prenom>
13
<age>40</age>
14
</personne>
15
</personnes>
16
</film>
17
'));
18
INSERT INTO film VALUES (XMLType('
19
<film>
20
<nom>Trinita est de retour</nom>
21
<annee>1968</annee>
22
<personnes>
23
<personne>
24
<nom>Fonda</nom>
25
<prenom>Jack</prenom>
26
<age>53</age>
27
</personne>
28
</personnes>
29
</film>
30
'));
31
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.EXTRACT('/film/personnes/personne/nom').GETSTRINGVAL() AS nom FROM film f;
2
SELECT f.EXTRACT('/film/personnes/personne[1]/nom').GETSTRINGVAL() AS nom FROM film f;
3
SELECT f.EXTRACT('/film/personnes/personne[age]/nom').GETSTRINGVAL() AS nom FROM film f;
4
SELECT f.EXTRACT('/film/personnes/personne[age>50]/nom').GETSTRINGVAL() AS nom FROM film f;