Announcement

Collapse
No announcement yet.

extractvalue(extract - Problem

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • extractvalue(extract - Problem

    Hallo zusammen,


    Ausgangssituation:

    - Datenbank Oracle 11g
    - Binary XML Table mit "CREATE TABLE XML_TEST OF XMLType XMLTYPE STORE AS BINARY XML;" angelegt
    - Daten in Tabelle mit "insert into XML_TEST values (XMLTYPE(BFILENAME ('BMECATIMPORT','Test.xml'),13));" geladen



    Problem:

    Es gibt zu jeder SUPPLIER_PID (Artikelnummer) mehrere FEATURES (Artikelmerkmale).
    Diese Informationen bräuchte ich in zwei Spalten relational aufbereitet, in der Form:





    Die XML-Datei hat bei den Artikeln diesen Aufbau:

    <PRODUCT mode="new">
    <SUPPLIER_PID>0125</SUPPLIER_PID>
    <PRODUCT_FEATURES>
    <FEATURE>
    <FNAME>EF000227</FNAME>
    <FVALUE>-</FVALUE>
    </FEATURE>
    <FEATURE>
    <FNAME>EF003832</FNAME>
    <FVALUE>True</FVALUE>
    </FEATURE>
    <FEATURE>
    <FNAME>EF001739</FNAME>
    <FVALUE>1</FVALUE>
    </FEATURE>
    </PRODUCT_FEATURES>
    </PRODUCT>




    Mein Select-Statement sieht so aus und liefert kein Ergebnis, weil extractvalue() nur einen Wert zurückgeben kann:





    Wenn ich nur mit extractvalue() Abfrage, bekomme ich zwar ein Ergebnis, allerdings nur eine Zeile pro Artikel und in der zweiten Spalte nur ein Clob:




    Welche Möglichkeit gibt es, die Daten in zwei Spalten auszulesen?

    Vielen Dank im voraus!
    Gruß
    Daniel

  • #2
    Problem selber gelöst.
    Ich habe einfach eine zweite xml-Sequenz eingebaut und schon funktionierts.

    Code:
    select extractvalue(value(a), 'PRODUCT/SUPPLIER_PID') SUPPLIER_PID,
    extractvalue(value(b), 'FEATURE/FNAME') FNAME
    from xml_test, 
    table(xmlsequence(extract(xml_doc, '//PRODUCT'))) a, 
    table(xmlsequence(extract(value(a), '//PRODUCT/PRODUCT_FEATURES/FEATURE'))) b

    Comment

    Working...
    X