Alcuni contesto: Il DB è Oracle. Sto cercando di creare una stringa delimitata per riga di una tabella. Alcuni dei valori della stringa delimitata devono provenire da CLOB (contenente XML). I CLOB possono essere nulli su alcune righe ed è qui che si trova il problema.Estrarre il valore specfic da CLOB (contenente XML) durante la creazione di una stringa delimitata per riga di una tabella. Il valore CLOB può essere nullo su alcune righe
Ad esempio, ho una tabella: "Elemento" con le seguenti righe: "Item_ID", "Item_CD", "Item_TXT" (CLOB). Il tavolo ha due righe. Una riga ha il seguente codice XML memorizzato in 'Item_TXT', l''altra stringa' Item_TXT 'è null.
<OuterTag>
<InnerTag>test</InnerTag>
</OuterTag>
ho creato il seguente SQL per restituire i primi 3 elementi della stringa delimitata:
SELECT 'Item%#'|| Item_ID ||'%#'|| Item_STAT_CD
FROM Item;
Questo ha funzionato con successo:
Item% # 12345% # Un
Articolo % # 123456% # A
Ho quindi provato ad aggiungere il 4 ° elemento (valore da CLOB).
SELECT 'Item%#'|| Item_ID ||'%#'|| Item_STAT_CD
EXTRACT(XMLTYPE(Item_TXT), '//OuterTag/InnerTag/text()').getStringVal()
FROM Item;
questo non è riuscito con il seguente errore:
ORA-06502: PL/SQL: numeric or value error
ORA-06512: at "SYS.XMLTYPE", line 272
ORA-06512: at line 1
ho ridotto questo problema fino a volte alla Item_TXT è nullo e XMLTYPE() non può gestire questa situazione. Per dimostrare questo ho eseguito il seguente:
SELECT 'Item%#'|| Item_ID ||'%#'|| Item_STAT_CD
EXTRACT(XMLTYPE(Item_TXT), '//OuterTag/InnerTag/text()').getStringVal()
FROM Item
WHERE Item_TXT IS NOT NULL;
Questo lavorato con successo:
Item% # 12345% # e% # prova
non v'è alcun modo di elaborare tutta la tabella, l'estrazione di valore da clob se disponibile, altrimenti aggiungendo null/nulla alla stringa delimitata?
Grazie per tutto l'aiuto in anticipo :)
Ah grazie per questo, molto utile !! Grazie :) –