Разбор оракула XML с несколькими строками - PullRequest
0 голосов
/ 11 апреля 2019

запрос из xml не возвращает строки.

Я выполняю этот запрос, но не возвращаю строки.

Мой xml:

<?xml version="1.0" encoding="UTF-8"?>
<ns0:testata xmlns:ns0="http://siete">
  <ns0:product>
    <ns0:YEAR>2019</ns0:YEAR>
    <ns0:PERIOD>1</ns0:PERIOD>
  </ns0:product>
  <ns0:product>
    <ns0:YEAR>2019</ns0:YEAR>
    <ns0:PERIOD>2</ns0:PERIOD>
  </ns0:product>
</ns0:testata>

Мой запрос

FROM XMLTABLE('/testata/product'  
         PASSING   
              (select  xmltype(t.XML1) doc
                 from tb_test t)
         COLUMNS  
             name  varchar2(4)    PATH './YEAR'
     ) xmlt   

0 строк

пожалуйста, помогите мне

1 Ответ

2 голосов
/ 11 апреля 2019

Ваш XML-документ имеет пространство имен, поэтому вам нужно либо подстановить узлы в вашем вызове XMLTable, либо - предпочтительно - предоставить ту же информацию о пространстве имен и префиксы:

-- CTE for sample data
with tb_test (xml1) as (select '<?xml version="1.0" encoding="UTF-8"?>
<ns0:testata xmlns:ns0="http://siete">
  <ns0:product>
    <ns0:YEAR>2019</ns0:YEAR>
    <ns0:PERIOD>1</ns0:PERIOD>
  </ns0:product>
  <ns0:product>
    <ns0:YEAR>2019</ns0:YEAR>
    <ns0:PERIOD>2</ns0:PERIOD>
  </ns0:product>
</ns0:testata>' from dual
)
-- actual query
select x.year
from tb_test t
cross join xmltable(
  xmlnamespaces('http://siete' as "ns0"),
  '/ns0:testata/ns0:product'
  passing xmltype(t.xml1)
  columns year number path 'ns0:YEAR'
) x;

      YEAR
----------
      2019
      2019
...