Это мои данные CLOBXML Извлечение тегов значение из столбца CLOB с несколькими тегами с таким же именем в Oracle
<id>ID001</id>
<atrbtList>
<Atrbts>
<atrTyp>1</atrTyp>
<atrVal>04120101254</atrVal>
</Atrbts>
<Atrbts>
<atrTyp>2</atrTyp>
<atrVal>1254</atrVal>
</Atrbts>
</atrbtList>
в таблице.
Мне нужно извлечь данные в виде
ID |Type |Value
------------------
ID001 | 1 |04120101254
ID001 | 2 |1254
В настоящее время я использую функцию экстракта Oracle XML и это, насколько я пошел с запросом
SELECT
XMLTYPE(xml_clob).extract('//id/text()').getStringVal() AS Id,
EXTRACTVALUE(s1.COLUMN_VALUE, '//atrTyp') AS AtrTyp,
EXTRACTVALUE(s.COLUMN_VALUE, '//atrVal') AS AtrVal
FROM table_name T,
TABLE(
XMLSequence(
EXTRACT(
XMLType(T.xml_clob),
'//atrVal'
)
)
) s,
TABLE(
XMLSequence(
EXTRACT(
XMLType(T.xml_clob),
'//atrTyp'
)
)
) s1
и это дает результат
ID |Type |Value
------------------
ID001 1 04120101254
ID001 2 04120101254
ID001 1 1254
ID001 2 1254
Может ли кто-нибудь указать мне в правильном направлении, чтобы получить желаемый результат t, и я также чувствую, что запрос может быть улучшен или есть лучший способ сделать это, которого я не вижу.
PS: Стол и его содержимое
CREATE TABLE table_name (xml_clob CLOB);
INSERT INTO table_name VALUES (
'<data><id>ID001</id><atrbtList><Atrbts><atrTyp>1</atrTyp><atrVal>04120101254</atrVal></Atrbts><Atrbts><atrTyp>2</atrTyp><atrVal>1254</atrVal></Atrbts></atrbtList></data>'
);