выдержка из xmlns oracle - PullRequest
0 голосов
/ 01 марта 2020

этот код возвращает ноль, и как я могу извлечь 012019-122019 из периода?

with qwe as (
select  xmltype('<singleAggregatePaymentResponse xmlns:ns7="http://www.mtszn.kz/services/PersonCotracts/schemas">
                  <ns7:isEspPayer xmlns="http://www.mtszn.kz/services/PersonCotracts/schemas">true</ns7:isEspPayer>

                  <ns7:periods xmlns="http://www.mtszn.kz/services/PersonCotracts/schemas">
                     <period>122019</period>
                     <period>112019</period>
                     <period>102019</period>
                     <period>092019</period>
                     <period>082019</period>
                     <period>072019</period>
                     <period>062019</period>
                     <period>052019</period>
                     <period>042019</period>
                     <period>032019</period>
                     <period>022019</period>
                     <period>012019</period>
                  </ns7:periods>

               </singleAggregatePaymentResponse>')xml
               from dual
               )

              select
              extractvalue(value(x101_1),'/period') iou,
               xml

                from qwe q,
                     table(xmlsequence(q.xml.extract('//period')))(+) x101_1

1 Ответ

0 голосов
/ 01 марта 2020

Оба параметра extractvalue и xmlsequence устарели.

Вместо этого вы можете сделать это с помощью xmltable:

select x.period
from qwe q
cross join xmltable(
  xmlnamespaces(default 'http://www.mtszn.kz/services/PersonCotracts/schemas'),
  '//period'
  passing q.xml
  columns period varchar2(6) path '.'
) x;

db <> fiddle

As ваш XML имеет только одно пространство имен, которое я объявил по умолчанию. Имея более одного или просто, если вы предпочитаете, вы можете назвать его вместо:

select x.period
from qwe q
cross join xmltable(
  xmlnamespaces('http://www.mtszn.kz/services/PersonCotracts/schemas' as "ns7"),
  '//ns7:period'
  passing q.xml
  columns period varchar2(6) path '.'
) x;

db <> fiddle

...