Lecture XML via XMLTable : lire le fichier en 1 seule fois
:oops: Bonjour A tous
je vais essayer d’être clair 8-)
j'ai le fichier XML suivant et j'essaye de traiter des infos qui ne sont pas sur le meme niveau hierarchique (ici le tag requestId avec les tags networkAccounId)
cat /tmp/Response.xml
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<batchNewResponse>
<entry>
<requestId>EN014383</requestId>
<select>FixePhoneNumber,MobilePhoneNumber,EmailAdresse</select>
<count>9</count>
<nblines>7</nblines>
</entry>
<feed>
<networkAccountId id="001234567">"+33025117528","",""</networkAccountId>
<networkAccountId id="000123456">"","+33094063225","helene.dici@la.fr"</networkAccountId>
<networkAccountId id="123456789">"+33098257276","",""</networkAccountId>
<networkAccountId id="987654322">"","+33735633685","jossdela@gmal.com"</networkAccountId>
<networkAccountId id="000001234">"+33000024957","",""</networkAccountId>
<networkAccountId id="000897356">"+33783763117","+3246353440",""</networkAccountId>
<networkAccountId id="8762543SD"></networkAccountId>
<networkAccountId id="IdNo98376">"+33612600007","+33098235637",""</networkAccountId>
<networkAccountId id="TestIdNo9">"","+33556736332",""</networkAccountId>
<networkAccountId id="TestIdNo6"></networkAccountId>
</feed>
</batchNewResponse> |
et les 2 requêtes suivantes donne ce que je souhaite avoir , mais mon souci :aie: est de devoir faire 2 requêtes (donc 2 lectures du fichier XML)
(TMP_DIR est un directory ORACLE ==> Create Or Replace Directory TMP_DIR as '/tmp/')
cat Resp.sql
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| set pagesize 0
set heading off
Set linesize 400
select x.* from XMLTable( '/batchNewResponse/entry'
passing xmltype( bfilename('TMP_DIR','Response.xml'),nls_charset_id('Windows-1251') )
columns
no_file varchar2(300) path 'requestId'
) x;
select x.* from XMLTable( '/batchNewResponse/feed/networkAccountId'
passing xmltype( bfilename('TMP_DIR','Response.xml'),nls_charset_id('Windows-1251') )
columns
id varchar2(10) path '@id',
info varchar2(300) path '.'
) x; |
le résultat attendu est ok :aie: mais mon problème est que je lis 2 fois le fichier
(Sous Sqlplus)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| @Resp.sql
EN014383
001234567 "+33025117528","",""
000123456 "","+33094063225","helene.dici@la.fr"
123456789 "+33098257276","",""
987654322 "","+33735633685","jossdela@gmal.com"
000001234 "+33000024957","",""
000897356 "+33783763117","+3246353440",""
8762543SD
IdNo98376 "+33612600007","+33098235637",""
TestIdNo9 "","+33556736332",""
TestIdNo6 |
Est il possible de faire une seule requete (Impliquant bien entendu 1 seule lecture du fichier) pour avoir le résultat suivant
Code:
1 2 3 4 5 6 7 8 9 10 11
|
EN014383 001234567 "+33025117528","",""
EN014383 000123456 "","+33094063225","helene.dici@la.fr"
EN014383 123456789 "+33098257276","",""
EN014383 987654322 "","+33735633685","jossdela@gmal.com"
EN014383 000001234 "+33000024957","",""
EN014383 000897356 "+33783763117","+3246353440",""
EN014383 8762543SD
EN014383 IdNo98376 "+33612600007","+33098235637",""
EN014383 TestIdNo9 "","+33556736332",""
EN014383 TestIdNo6 |
Merci de votre aide
@Argoet