Translate

Montag, 17. Juni 2019

XMLTABLE Tipp - concatenate - verbinden von XML-tags mit string-join - extract mit [last()]

Im Rahmen einer Schnittstellen-Entwicklung, wo ich in einem FTP-Verzeichnis täglich eingehende XML-Dateien parse mittels pl/sql und UTL_FILE und XMLTABLE, wollte ich gerne mehrere tag-Inhalte zusammenfassen...., um sie in eine Tabellenspalte zu schreiben - dies ist selten bis gar nicht dokumentiert... also jetzt hier:

meine tags/Segmente:

<row>
   <pickup>
       <location>
            <name>Leergut GmbH</name>
            <street>Lange Reihe 22</street>
            <zipCode>25912</zipCode>
            <city>Schulau</city>
            <phone>04321-12345-0</phone>

      <location>
   </pickup>
<row>

Die fett formatierten tag-Teile sollen nun "concateniert" werden mit "string-join"

die entsprechende Zeile bei COLUMNS lautet dann:

 location varchar2(200) PATH 'string-join(row/pickup/location,",")'

meine vollständigen (gekürzten) Abfrage:

SELECT xt.*
  FROM XMLTABLE(
   PASSING XMLTYPE(BFILENAME('XML_DIR', fileName), -- parsen der Dateinamen
--   PASSING XMLTYPE(BFILENAME('XML_DIR', 'v_53_1_16166.xml'), -- zum Test 1 Datei
      nls_charset_id('AL32UTF8') ) 
COLUMNS
 seq,
 ......
 location varchar2(200) PATH 'string-join(row/pickup/location,",")',
 .......
 ) xt;

Ergebnis:
Spalte location:
Leergut GmbHLangeReihe2225912Schulau04321-12345-0

I: lediglich den "Trenner "," nimmt pl/sql bzw. xml nicht...


Ein weiterer Tipp:
Gibt es mehrere "Details" zu einem Tag, konnte ich den "letzten" mit [last()] herausfiltern:
Beispiel: es gibt 2 Adressen-Details bei "location", dann wird die letztere herausgefiltert:

location varchar2(200) PATH 'row/pickup[last()]/location',




Keine Kommentare:

Kommentar veröffentlichen