Ich habe das folgende Stück XML:
%Vor%Von diesem XML möchte ich einige Daten in PL / SQL extrahieren. Ich möchte XMLTABLE verwenden, da die Funktionen EXTRACT und EXTRACTVALUE veraltet sind.
Ich kann die Daten mit dieser Abfrage extrahieren:
%Vor%Ich verwende Platzhalter für die Namespaces, da es mir eigentlich egal ist, welche Abkürzungen die sendende Seite für den Namespace verwendet, ich kenne den genauen Pfad, wo ich meine Daten trotzdem bekommen soll.
Mit diesem Code habe ich zwei Dinge, die mich verwirren:
Bearbeiten:
Ich habe herausgefunden, dass es funktioniert, wenn ich die Namespaces für die Elemente entferne und sie in Großbuchstaben umwandele. Es scheint also so, als müssten die Spaltennamen mit den XML-Elementnamen übereinstimmen, damit es funktioniert. Ich habe noch nicht herausgefunden, wie man es mit namespaced XML machen kann.
Ausführbares Codebeispiel:
%Vor% Wie bei Ihrer ersten Frage die Dokumentation, die Sie verlinkt haben , ist das heute so PATH
weglassen:
Die optionale
PATH
-Klausel gibt an, dass der Teil des XQuery-Ergebnisses, der durch die XQuery-Ausdruckszeichenfolge adressiert wird, als Spalteninhalt verwendet wird.Wenn Sie
PATH
weglassen, wird die XQuery-Ausdrucksspalte angenommen. Zum Beispiel:
(... COLUMNS xyz)
entspricht
XMLTable(... COLUMNS xyz PATH 'XYZ')
Sie können verschiedene PATH-Klauseln verwenden, um das XQuery-Ergebnis in verschiedene virtuelle Tabellenspalten aufzuteilen.
Der Grund dafür, dass die Spalte xyz
als 'XYZ'
angenommen wird, liegt daran, dass Oracle standardmäßig nicht zwischen Groß- und Kleinschreibung unterscheidet (standardmäßig Großbuchstaben). Wenn Sie Ihre Spalte als "aBcD"
definiert haben, wird der Wert PATH
als 'aBcD'
Was Ihre zweite Frage zum Spezifizieren von Datentypen betrifft: Wenn die Daten, die Sie extrahieren, immer Textdaten sein werden, können Sie möglicherweise keinen Datentyp angeben.
Wenn Sie jedoch mit Dingen wie Daten, Zeitstempeln, Gleitkommazahlen usw. zu tun haben, können Probleme auftreten. Sie müssen sie entweder manuell mithilfe der Funktionen TO_*
konvertieren oder ihre Datentypen in den Spaltendefinitionen angeben. Wenn Sie das nicht tun, ist es Oracle frei, es implizit zu verwenden, wie es sich auch anfühlt, was unerwartete Folgen haben könnte.
Referenzen:
Wie XML bei Verwendung von Namespace in XML (Oracle)
durch XML-Tabelle analysiert wirdEs sollte wie erwartet funktionieren, wenn Sie die Namespace-Elemente in Ihrer XML-Tabelle laden:
%Vor%Aus Ihrem Beispiel (möglicherweise müssen Sie auch Ihr Schema / Ihren Namespace vorzeitig registrieren, aber das sollte einmal sein):
%Vor%Dinge, die früher in früheren Versionen von Oracle funktionierten, funktionieren nicht in 11g + in Bezug auf XML. Aus dem, was ich gesehen habe, überprüft / typisiert Oracle Eingabe / Ausgabe von XML-Operationen, wo Sie in früheren Versionen normal laufen konnten ordnungsgemäße XQuery-Operationen ohne Namespace-Informationen.