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 :
Quelqu'un serait-il plus à l'aise que moi pour manipuler les fichiers XML ?
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 ;
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![]()
Partager