Oracle | XML Данные экспортированы с помощью регулярных выражений - PullRequest
0 голосов
/ 28 января 2020

Я создал запрос для извлечения данных из XML столбца таблицы, однако у меня возникла проблема, когда XML имеет список данных, т.е.

У бренда Cola есть несколько кодов внутри

См. Мой запрос

select extract(cola_info, '/ns2:cola/coke/bottleCode', 'xmlns:ns2="http://myColaStaticInfo.com"') as op;

Вывод похож на

enter image description here

Я хотел бы выделить содержимое один за другим, а не вместе в одном столбце.

Любая идея !!!

МОЙ XML выглядит так

<?xml version="1.0" encoding="ISO-8859-15" standalone="yes"?>
<ns2:cola xmlns:ns2="http://myColaStaticInfo.com">
    <coke>
        <code>Bottle_2829</code>
        <label>Mirinda</label>
    </coke>
    <coke>
        <code>Bottle_2830</code>
        <label>Mirinda</label>
    </coke>
    <coke>
        <code>Bottle_2831</code>
        <label>Mirinda</label>
    </coke>
</ns2:cola>

1 Ответ

1 голос
/ 28 января 2020

XMLTable, вероятно, ваш лучший выбор для этого. Тем более что extract устарело.

with example_data as (select xmltype('<?xml version="1.0" encoding="ISO-8859-15" standalone="yes"?>
<ns2:cola xmlns:ns2="http://myColaStaticInfo.com">
    <coke>
        <code>Bottle_2829</code>
        <label>Mirinda</label>
    </coke>
    <coke>
        <code>Bottle_2830</code>
        <label>Mirinda</label>
    </coke>
    <coke>
        <code>Bottle_2831</code>
        <label>Mirinda</label>
    </coke>
</ns2:cola>') as xml from dual)
-- query
select bottle_coke
from example_data e
cross join XMLTABLE(XMLNAMESPACES('http://myColaStaticInfo.com' as "ns2"),
        '/ns2:cola/coke'
         PASSING e.xml
         COLUMNS 
           bottle_coke XMLTYPE PATH 'code'
         ) xt;

Вывод:

<code>Bottle_2829</code>
<code>Bottle_2830</code>
<code>Bottle_2831</code>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...