Soit les fichiers XML suivants représentant les personnages des films "Trinita" (1967) et "Trinita est de retour" (1968).
<?xml version="1.0" encoding="UTF-8"?>
<personnes>
<personne>
<nom>Personne</nom>
<prenom>Terence</prenom>
</personne>
<personne>
<nom>Trinita</nom>
<prenom>Terence</prenom>
<age>40</age>
</personne>
</personnes>
<?xml version="1.0" encoding="UTF-8"?>
<personnes>
<personne>
<nom>Fonda</nom>
<prenom>Jack</prenom>
<age>53</age>
</personne>
</personnes>
Soit la table suivante en relationnel-XML : film (#nom:varchar(255), annee:number, pers:XMLType).
Créer une table Oracle correspondant en utilisant XMLType.
CREATE TABLE film (
nom VARCHAR(255) PRIMARY KEY,
age NUMBER,
pers XMLTYPE NOT NULL
)
Insérer les données de l'exemple dans la table.
INSERT INTO film VALUES ('Trinita', '1967', XMLType('
<personnes>
<personne>
<nom>Personne</nom>
<prenom>Terence</prenom>
</personne>
<personne>
<nom>Trinita</nom>
<prenom>Terence</prenom>
<age>40</age>
</personne>
</personnes>
'));
INSERT INTO film VALUES ('Trinita est de retour', '1968', XMLType('
<personnes>
<personne>
<nom>Fonda</nom>
<prenom>Jack</prenom>
<age>53</age>
</personne>
</personnes>
'));
É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
SELECT f.pers.EXTRACT('XPath').GETSTRINGVAL() AS ... FROM film f;
SELECT f.pers.EXTRACT('/personnes/personne/nom').GETSTRINGVAL() AS nom FROM film f;
SELECT f.pers.EXTRACT('/personnes/personne[1]/nom').GETSTRINGVAL() AS nom FROM film f;
SELECT f.pers.EXTRACT('/personnes/personne[age]/nom').GETSTRINGVAL() AS nom FROM film f;
SELECT f.pers.EXTRACT('/personnes/personne[age > 50]/nom').GETSTRINGVAL() AS nom FROM film f;