чтение XMLTYPE с использованием XMLTable - PullRequest
0 голосов
/ 11 сентября 2018

Хорошо, поэтому у меня есть проблема в PLSQL, что запрос возвращает буквально 0 строк:

select xt.CRN
 from xml_table x, XMLTable('/IE599/PotwierdzenieWywozu'
   passing x.xml_value
   columns
   CRN varchar2(100) PATH '@CRN' ) xt
   where x.id_xml=19740 

XML выглядит так:

<?xml version="1.0" encoding="UTF-8"?>
<IE599 xmlns="http://www.mf.gov.pl/xsd/ECS/IE599_v1-0.xsd" EmailPodmiotu="xxx@xxxxxx.com" NrWlasny="xxxxx-1674661">
    <PotwierdzenieWywozu CRN="xxxxxxx-27564" DataPrzyjecia="2018-07-31T15:20:48" DataWyprowadzenia="xxxx-24" DataZwolnienia="xxxx-07-xxxx:51:20" DokumentyAlternatywne="0" Kontenery="1" KrajPrzeznaczenia="xxxx" KrajWysylki="xxxx" LiczbaOpakowan="xxxx" LiczbaPozycji="1" MRN="xxxxxxxxxxxxxx" MasaBrutto="453.680" NrWlasny="xxxxxx-xxxxx" OdprawaScentralizowana="0" P1a="EX" P1b="A" Tranzyt="0" UCWyprowadzenia="xxxxx" UCWywozu="xxxxxxx">
        <Nadawca EORI="xxxxxx" KodPocztowy="62-045" Kraj="PL" Miejscowosc="xxxxx" Nazwa="xxxxxx SP. ZO.O" TIN="xxxxxx" UlicaNumer="UL.xxxxx xx" />
        <Odbiorca KodPocztowy="xxxxx 1M8" Kraj="CA" Miejscowosc="xxxxx ST xxxxx" Nazwa="xxxxxx xxxxx - VILLE ST-LAURENT" UlicaNumer="xxxxx xxxxx xxxxxx" />
        <ZglaszajacyPrzedstawiciel EORI="PL527020362600000" KodPocztowy="05-090" Kraj="PL" Miejscowosc="xxxxx" Nazwa="xxxxx DISTRIBUTION SERVICES" Przedstawicielstwo="3" Regon="xxxxxxxx" TIN="xxxxxxx" UlicaNumer="xxxxx xxxxxx" />
        <TransportWewnetrzny Rodzaj="3" Znaki="HLXU8495377" />
        <TransportNaGranicy Kraj="PL" Rodzaj="1" Znaki="STATEK" />
        <Lokalizacja Miejsce="xxxxxx" />
        <WarunkiDostawy Kod="xxxxx" Miejsce="xxxxxx" MiejsceKod="1" />
        <Transakcja Rodzaj="11" Wartosc="4130.00" />
        <Towar KodTaric="00" KodTowarowy="xxxxxxx" MasaNetto="453.680" Nr="1" OpisTowaru="xxxxxxxx[14szt.]" ProceduraPoprzednia="00" ProceduraWnioskowana="10">
            <Opakowanie LiczbaSztuk="14" Rodzaj="NE" />
            <Kontener Nr="xxxxxxxx" />
            <KodDodatkowyUE Kod="4099" />
            <DokumentWymagany Kod="xx" Nr="xxxxxxx" />
            <InformacjaDodatkowa Kod="30200" />
            <WartoscTowaru WartoscStatystyczna="4212.00">
                <Korekta Kod="1STW" Wartosc="82.10" />
            </WartoscTowaru>
        </Towar>
        <WynikKontroli Kod="A3" Termin="2018-10-29" />
        <MiejsceData Data="2018-07-31" Miejsce="xxxxxx xxxxxx" NazwiskoImie="xxxxxx xxxxxxx" Stanowisko="xxxxxx d/s xxxxxx" Telefon="xx xxx xx xx" />
        <WynikKontroliGr Kod="A2" />
    </PotwierdzenieWywozu>
</IE599>

Так что я могу делать не так? Я пробовал несколько вариантов, таких как добавление (@ и /) или удаление его из Path, но ничего не получалось так, как я хотел ...

1 Ответ

0 голосов
/ 13 сентября 2018

Решением этой проблемы является добавление пространства имен в XMLTABLE, поэтому код:

select xt.CRN
 from xml_table x, XMLTable('/IE599/PotwierdzenieWywozu'
   passing x.xml_value
   columns
   CRN varchar2(100) PATH '@CRN' ) xt
   where x.id_xml=19740 

Должно быть как:

select xt.CRN
 from xml_table x, XMLTable('declare default element namespace "http://www.mf.gov.pl/xsd/ECS/IE599_v1-0.xsd";/IE599/PotwierdzenieWywozu'
   passing x.xml_value
   columns
   CRN varchar2(100) PATH '@CRN' ) xt
   where x.id_xml=19740 
...