Niektóre kontekst: DB jest Oracle. Próbuję utworzyć jeden rozdzielany ciąg na wiersz tabeli. Niektóre wartości rozdzielanego łańcucha muszą pochodzić z obiektów CLOB (zawierających XML). W niektórych wierszach wartości CLOB mogą mieć wartość zerową i tu leży problem.Wyodrębnij określoną wartość z CLOB (zawierającego XML) podczas tworzenia jednego rozdzielanego ciągu znaków na wiersz tabeli. Wartość CLOB może być pusta w niektórych wierszach.
Na przykład mam tabelę: "Element" z następującymi wierszami: "identyfikator_produktu", "element_CD", "element_TXT" (CLOB). Tabela ma dwa rzędy. Jeden wiersz zawiera następujący XML zapisany w "Item_TXT", drugi wiersz "Item_TXT" ma wartość null.
<OuterTag>
<InnerTag>test</InnerTag>
</OuterTag>
stworzyłem następujące SQL, aby powrócić pierwsze 3 elementy ograniczonej wyrażenie:
SELECT 'Item%#'|| Item_ID ||'%#'|| Item_STAT_CD
FROM Item;
ten pracował z powodzeniem:
Element% # 12345% # A
Item % # 123456% # A
Następnie próbowałem dodać 4. element (wartość z CLOB).
SELECT 'Item%#'|| Item_ID ||'%#'|| Item_STAT_CD
EXTRACT(XMLTYPE(Item_TXT), '//OuterTag/InnerTag/text()').getStringVal()
FROM Item;
ta nie powiodła się z następującym błędem:
ORA-06502: PL/SQL: numeric or value error
ORA-06512: at "SYS.XMLTYPE", line 272
ORA-06512: at line 1
mam zawężony ten problem w dół czasami Item_TXT jest nieważna i XMLType() nie może sobie z tym poradzić. Aby to udowodnić, wpadłem następujące:
SELECT 'Item%#'|| Item_ID ||'%#'|| Item_STAT_CD
EXTRACT(XMLTYPE(Item_TXT), '//OuterTag/InnerTag/text()').getStringVal()
FROM Item
WHERE Item_TXT IS NOT NULL;
To działało skutecznie:
Element% # 12345% # A% # test
Czy jest jakiś sposób przetworzenia całej tabeli, wydobywania wartości z CLOB jeśli jest dostępny, w przeciwnym razie dodaje zero/nic do rozdzielanego ciągu znaków?
Dziękuję za wszelką pomoc z góry :)
Ah dzięki za to, bardzo przydatne !! Dziękuję Ci :) –