Analysieren eine Soap-Antwort in einer Oracle 11g-Funktion
Habe ich eine Funktion in Oracle 11g, die verwendet UTL_HTTP zu konsumieren eines web service. Ich bin die Speicherung der SOAP-Antwort in einem CLOB.
Nach der Erforschung für die Stunden, die ich noch nicht gefunden, eine Möglichkeit, direkt zu analysieren, XML-Felder in den clob.
Den SOAP-response in den clob sieht ungefähr so aus:
(CLOB) <?xml version="1.0" ?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GET_PERMITOutput xmlns="http://xmlns.oracle.com/orawsv/DBUSER/MYSERV">
<RETURN>
<STATUS_CODES>
<stat>REC</stat>
</STATUS_CODES>
</RETURN>
</GET_PERMITOutput>
</soap:Body>
</soap:Envelope>
Ich möchte in der Lage sein, zu analysieren, den Wert "REC" aus (in anderen Fällen werden mehrere status-codes) und etwas tun, damit in meiner Funktion.
Du musst angemeldet sein, um einen Kommentar abzugeben.
First off, es wäre wahrscheinlich einfacher zum speichern von XML in einem
XMLType
Spalte. Ansonsten, um die Daten analysieren, die Sie gehen zu müssen, konvertieren Sie dieCLOB
zu einemXMLType
zur Laufzeit.Vorausgesetzt, Sie sind, beginnend mit einem
CLOB
jedoch, Sie sollten in der Lage sein, etwas zu tun, wieum die Daten zu extrahieren. Für meinen test habe ich eine Tabelle erstellt mit einer
CLOB
Eingefügt Beispieldaten
Und dann schrieb Sie die Abfrage, um es zu entpacken
CLOB
in einer Tabelle-Sie könnten genau das tun die gleiche Sache mit eine lokale variable, die deklariert ist alsCLOB
. Ich war nur mit einem Tisch, denn es war nicht ersichtlich, ob Sie hatte einenCLOB
in einer Tabelle oder in einer lokalen variable.Fand ich einen Weg, dies zu tun, ohne zum einfügen in eine temporäre Tabelle. Meine Funktion wird eine SOAP-Antwort in form eines CLOB, und speichert es in einer variable namens "bzw", die unten verwendet wird, ohne einlegen der clob in etwas temporär:
Ein clob ist ein sicherer Weg, um zu behandeln, die soap-Anfrage als eine XMLType, da die Daten zurückgegeben werden kann, die länger als 32767 bytes.
CLOB
noch einXMLType
sind beschränkt auf 32767 bytes-- einXMLType
ist nur einCLOB
mit einer Reihe von XML-utility-Funktionen, die um ihn herum gewickelt. EinXMLType
ist der bevorzugte Weg, um die XML in PL/SQL. EinVARCHAR2
in PL/SQL ist beschränkt auf 32767.