#sql #xml #oracle #extract
#sql #xml #Oracle #извлечь
Вопрос:
Я хочу извлечь XML-файл (XML_DATA):
XML:
-<XP6>
<INFO_1>
<INFO_2>
<INFO_3>
-<Prdct>
-<Prdct_row>
.....
<LILBFLO>Samsung,corp. </LILBFLO> <--value
Я пробовал это, но это не работает:
EXTRACTVALUE(XML_DATA,'/Prdct/Prdct_row/LILBFLO/text()')
Как правильно использовать extractvalue
?
Ответ №1:
Предполагая, что символы / — указывают на свернутые узлы, и ваш XML на самом деле выглядит примерно так, как образец в этом CTE, вам просто нужно включить корневой узел в path:
with your_table (xml_data) as (
select xmltype('<XP6>
<INFO_1/>
<INFO_2/>
<INFO_3/>
<Prdct>
<Prdct_row>
<LILBFLO>Samsung,corp. </LILBFLO>
</Prdct_row>
</Prdct>
</XP6>') from dual
)
select EXTRACTVALUE(XML_DATA,'/XP6/Prdct/Prdct_row/LILBFLO/text()')
from your_table;
EXTRACTVALUE(XML_DATA,'/XP6/PRDCT/PRDCT_ROW/LILBFLO/TEXT()')
------------------------------------------------------------
Samsung,corp.
Но extractvalue()
функция устарела, поэтому вместо нее следует использовать XMLQuery:
select XMLQuery('/XP6/Prdct/Prdct_row/LILBFLO/text()' passing XML_DATA returning content)
from your_table;
XMLQUERY('/XP6/PRDCT/PRDCT_ROW/LILBFLO/TEXT()'PASSINGXML_DATARETURNINGCONTENT)
--------------------------------------------------------------------------------
Samsung,corp.