Bonjour,

Je dois extraire des données d'un fichier XML pour les intégrer dans ma base de données.
J'insère le fichier dans une colonne de type XMLTYPE d'une table de travail avec SQL*Loader.
Jusque là, j'ai réusssi à m'en sortir avec la structure de ce fichier mais là je sèche.

La structure du document qui me pose problème est la suivante :
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<Portefeuille>
    <Client>
        <Identifiant>345</Identifiant>
        <Adresse>
            <Type>PERS</Type>
            <Ligne>18, rue du Chat Qui Pêche</Ligne>
            <Ligne>Appt 21</Ligne>
            <Ligne></Ligne>
            <Ligne></Ligne>
            <Ville>TRIFOUILLY</Ville>
        <Adresse/>
        <Adresse>
            <Type>PRO</Type>
            <Ligne>A.C.M.E</Ligne>
            <Ligne>Direction Financière</Ligne>
            <Ligne>20, rue Montgolfier</Ligne>
            <Ligne></Ligne>
            <Ville>AILLEURS Lez TRIFOUILLY</Ville>
        <Adresse/>
    </Client>
    <Client>
      ....
    </Client>
</Portefeuille>

J'arrive bien à extraire les données du client et les composantes de l'adresse mais je bloque sur les lignes de l'adresse :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
insert into ADRESSE
select  CLT.ID_CLIENT
    ,   ADR.TYPE_ADRESSE
    ,   ADR.VILLE
    ,   listagg(LGN.LIGNE, CHR(10)) 
            within group (order by LGN.ORDRE)    as LIGNES
from    XML_IMPORT  SRC
    ,   xmltable
            (   '/Portefeuille/Client'   passing SRC.XML_DATA
            columns
                ID_CLIENT               path    '/Identifiant'
            ,   ADRESSE         xmltype path    '/Adresse'
            )   CLT
    ,   xmltable
            (   '/Adresse'  passing CLT.ADRESSE
            columns
                TYPE_ADRESSE            path    '/Type'
            ,   VILLE                   path    '/Ville'
            ,   LIGNES          xmltype path    '/Ligne'
            )   ADR
    ,   xmltable
            (   '???'       passing ADR.LIGNES
            columns
                LIGNE                   path    '???'
            ,   ORDRE                   path    '???'
            )   LGN
where   LGN.LIGNE   is not null
group by    CLT.ID_CLIENT
    ,   ADR.TYPE_ADRESSE
    ,   ADR.VILLE
;
Quelqu'un serait-il plus à l'aise que moi pour manipuler les fichiers XML ?
Précision, je suis en 12.1.

PS: Inutile de me faire remarquer que le stockage de l'adresse dans la base n'est pas optimal. Je le sais et je me bats pour le modifier