Извлечь подстроку из столбца xml из набора результатов SQL-запроса - PullRequest
0 голосов
/ 28 августа 2018

У меня есть таблица MYTABLE и столбец MYXML в База данных Oracle 12 . Столбец MYXML содержит строки, как показано ниже, с различной длиной -

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:NodeData xmlns:ns2="http://abcd.org/xyz/schema/">
    <Head msgId="ACVF63980FGQW56123" orgId="12345" ts="2017-04-13T18:37:27+05:30" ver="1.0"/>
    <Info>
        <Identity id="45298" verifiedName="MFROMLA" type="TECH"/>
        <Rating name="HIGH"/>
    </Info>
    <Node Name="PQ" Desc="PreQualified" NodeID="2387ajdh231dqhhg21098"/>
</ns2:NodeData>

Я хочу извлечь PQ из значений этого столбца с помощью SQL-запроса. Как я могу это сделать? Я должен быть в состоянии искать, используя тег Name, если это возможно, и извлекает его значение.

Ответы [ 3 ]

0 голосов
/ 28 августа 2018

Если ваш столбец varchar2, вы можете использовать строковые методы; например, это два способа с регулярными выражениями и без них:

SELECT substr(myXml, 13, instr(myXml, '"', 1, 2) - 13),
       regexp_substr(myXml, '"([^"]+)"', 1, 1, 'i', 1)
FROM mytable

Если ваш столбец XMLTYPE, вы можете использовать подход XML:

SELECT EXTRACT(myXml, '/Node/@Name')
from myTable
0 голосов
/ 28 августа 2018

Это сработало для меня -

select name from mytable, xmltable(xmlnamespaces ('http://abcd.org/xyz/schema/' as "ns2"),'ns2:NodeData/Node' passing xmltype(myxml) columns name   varchar2(50) path '@Name');
0 голосов
/ 28 августа 2018

Это один запрос, который вы можете использовать, он извлекает атрибут Name узла Node из вашей строки xml. Предположим, что MYXML тип данных VARCHAR2

SELECT EXTRACT(xmltype(myxml), '/Node/@Name') 
FROM mytable;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...