Extrait de valeur spécifique de CLOB (contenant du XML), tout en créant une chaîne délimitée par la ligne d'une table. CLOB valeur peut être nulle sur certaines lignes

Le Contexte:
La base de données est Oracle. Je suis en train de créer une chaîne délimitée par la ligne d'une table. Certaines des valeurs de la chaîne délimitée doit venir de CLOBs (contenant du XML). Le CLOBs peut être nulle sur certaines lignes et c'est là que réside le problème.

Par exemple, j'ai une Table: "Item" avec les lignes suivantes: 'Item_ID', 'Item_CD', 'Item_TXT' (CLOB). La table dispose de deux lignes. Une ligne a la suite de XML stockés dans 'Item_TXT", l'autre ligne "Item_TXT" est null.

<OuterTag>      
    <InnerTag>test</InnerTag>   
</OuterTag>     

J'ai créé le SQL suivant pour retourner les 3 premiers éléments de la chaîne délimitée:

SELECT 'Item%#'|| Item_ID ||'%#'|| Item_STAT_CD 
FROM Item; 

Cela a fonctionné avec succès:

Élément%#12345%#Un

Élément%#123456%#Un

J'ai ensuite essayé d'ajouter le 4ème élément (valeur de CLOB).

SELECT 'Item%#'|| Item_ID ||'%#'|| Item_STAT_CD
EXTRACT(XMLTYPE(Item_TXT), '//OuterTag/InnerTag/text()').getStringVal()
FROM Item; 

Cela a échoué avec l'erreur suivante:

ORA-06502: PL/SQL: numeric or value error
ORA-06512: at "SYS.XMLTYPE", line 272
ORA-06512: at line 1

J'ai rétréci cette question à, parfois, la Item_TXT est nulle et XMLTYPE() ne peut pas gérer cela. Pour le prouver, j'ai couru le suivant:

SELECT 'Item%#'|| Item_ID ||'%#'|| Item_STAT_CD
EXTRACT(XMLTYPE(Item_TXT), '//OuterTag/InnerTag/text()').getStringVal()
FROM Item
WHERE Item_TXT IS NOT NULL; 

Cela a fonctionné avec succès:

Élément%#12345%#%#test

Est-il de toute façon de traiter l'ensemble de la table, extraire de la valeur de clob si disponible, sinon l'ajout d'null/rien à chaîne délimitée?

OriginalL'auteur James Gallagher | 2013-02-28