T'as le bonjour de Trinita

Oracle XMLType (table XML)

Soit les fichiers XML suivants représentant des films.

<film>
    <nom>Trinita</nom>
    <annee>1967</annee>    
    <personnes>
        <personne>
            <nom>Personne</nom>
            <prenom>Terence</prenom>
        </personne>
        <personne>
            <nom>Trinita</nom>
            <prenom>Terence</prenom>
            <age>40</age>
        </personne>
    </personnes>
</film>
<film>
    <nom>Trinita est de retour</nom>
    <annee>1968</annee>
    <personnes>
        <personne>
            <nom>Fonda</nom>
            <prenom>Jack</prenom>
            <age>53</age>
        </personne>
    </personnes>
</film>

Créer une table XML sous Oracle pour accueillir ces fichiers XML.

CREATE TABLE film OF XMLTYPE;

Insérer les données de l'exemple dans la table.

INSERT INTO film VALUES (XMLType('
<film>
    <nom>Trinita</nom>
    <annee>1967</annee>    
    <personnes>
        <personne>
            <nom>Personne</nom>
            <prenom>Terence</prenom>
        </personne>
        <personne>
            <nom>Trinita</nom>
            <prenom>Terence</prenom>
            <age>40</age>
        </personne>
    </personnes>
</film>
'));
INSERT INTO film VALUES (XMLType('
<film>
    <nom>Trinita est de retour</nom>
    <annee>1968</annee>
    <personnes>
        <personne>
            <nom>Fonda</nom>
            <prenom>Jack</prenom>
            <age>53</age>
        </personne>
    </personnes>
</film>
'));

É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.EXTRACT('/film/personnes/personne/nom').GETSTRINGVAL() AS nom FROM film f;
SELECT f.EXTRACT('/film/personnes/personne[1]/nom').GETSTRINGVAL() AS nom FROM film f;
SELECT f.EXTRACT('/film/personnes/personne[age]/nom').GETSTRINGVAL() AS nom FROM film f;
SELECT f.EXTRACT('/film/personnes/personne[age>50]/nom').GETSTRINGVAL() AS nom FROM film f;
AccueilExercices > Exercice : T'as le bonjour de Trinita< PrécédentSuivant >