Extrahieren bestimmter Wert von CLOB (mit XML) während der Erstellung einer getrennten string pro Zeile einer Tabelle. CLOB-Wert kann null sein, auf die einige Zeilen
Etwas Kontext:
Die DB ist Oracle. Ich bin versucht, erstellen Sie eine durch Trennzeichen getrennte Zeichenfolge pro Zeile einer Tabelle. Einige der Werte, die von der durch Trennzeichen getrennte Zeichenfolge muss von CLOBs (mit XML). Die CLOBs kann null sein, auf einige Zeilen und das ist, wo das Problem liegt.
Zum Beispiel, ich habe eine Tabelle: "Artikel" mit den folgenden Zeilen: 'Item_ID', 'Item_CD', 'Item_TXT' (CLOB). Der Tisch hat zwei Zeilen. Eine Zeile hat das folgende XML gespeichert 'Item_TXT', die andere Zeile ist 'Item_TXT' ist null.
<OuterTag>
<InnerTag>test</InnerTag>
</OuterTag>
Habe ich die folgende SQL-Rückkehr in den ersten 3 Elemente von der durch Trennzeichen getrennte Zeichenfolge:
SELECT 'Item%#'|| Item_ID ||'%#'|| Item_STAT_CD
FROM Item;
Diese erfolgreich gearbeitet:
Element%#12345%#A
Element%#123456%#A
Habe ich dann versucht, um das 4. element (Wert von CLOB).
SELECT 'Item%#'|| Item_ID ||'%#'|| Item_STAT_CD
EXTRACT(XMLTYPE(Item_TXT), '//OuterTag/InnerTag/text()').getStringVal()
FROM Item;
Diese fehlgeschlagen mit folgendem Fehler:
ORA-06502: PL/SQL: numeric or value error
ORA-06512: at "SYS.XMLTYPE", line 272
ORA-06512: at line 1
Ich habe verengt das Thema auf, um manchmal die Item_TXT null ist und XMLTYPE() nicht damit umgehen. Um dies zu beweisen, lief ich die folgenden:
SELECT 'Item%#'|| Item_ID ||'%#'|| Item_STAT_CD
EXTRACT(XMLTYPE(Item_TXT), '//OuterTag/InnerTag/text()').getStringVal()
FROM Item
WHERE Item_TXT IS NOT NULL;
Diese erfolgreich gearbeitet:
Element%#12345%#A%#test
Gibt es eine Möglichkeit der Verarbeitung der gesamten Tabelle extrahieren Wert aus clob, wenn verfügbar, sonst das hinzufügen von null/nichts, um getrennte Zeichenfolge?
Du musst angemeldet sein, um einen Kommentar abzugeben.
den Grund für den Fehler ist übrigens, dass die
xmltype
Konstruktor ist fehlerhaft mit der null-lobs. Ich persönlich benutze immerxmltype.createxml(item_txt)
statt. Sie finden es funktioniert so gut, ohne sich sorgen übernvl
etc.Versuchen Sie es mit nvl:
Hier ist ein sqlfiddle demo
Oder Sie können eine FALL Aussage :