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).

<?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;
AccueilExercices > Exercice : On continue à l'appeler Trinita< PrécédentSuivant >