Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Разъяснение по XMLTable  [new]
Hannibass
Member

Откуда:
Сообщений: 141
Добрый день!
Есть таблица в Oracle с полем XMLTYPE. Не могу распарсить этот простой xml.:
-- Create table
create table TEST_XML_tab
( id number,
  xml_text XMLTYPE
);

insert into TEST_XML_TAB
values(1,xmltype('<ips>
                    <MailItem ItemId="RF055214840CN">
                      <ClassCd>U</ClassCd>
                      <OrigCountryCd>CN</OrigCountryCd>
                      <DestCountryCd>BY</DestCountryCd>
                      <ItemEvent>
                        <TNCd>TN031</TNCd>
                        <Date>2015-08-01T13:49:50</Date>
                        <OfficeCd>BYMSQC</OfficeCd>
                        <ConditionCd>30</ConditionCd>
                      </ItemEvent>
                    </MailItem>
                    <MailItem ItemId="RF056229911CN">
                      <ClassCd>U</ClassCd>
                      <OrigCountryCd>CN</OrigCountryCd>
                      <DestCountryCd>BY</DestCountryCd>
                      <ItemEvent>
                        <TNCd>TN031</TNCd>
                        <Date>2015-08-01T13:49:50</Date>
                        <OfficeCd>BYMSQC</OfficeCd>
                        <ConditionCd>30</ConditionCd>
                      </ItemEvent>
                    </MailItem>
                  </ips>'));


Выбираю значения из поля XML_TEXT так:
SELECT t.id, x.ITEM_ID,x.CLASS_CD, x.ORIG_COUNTRY_CD, x.DEST_COUNTRY_CD
FROM test_xml_ips t,XMLTABLE('/ips/MailItem'
                            PASSING t.xml_data
                            COLUMNS ITEM_ID         varchar2(13 char) PATH 'ItemId',
                                    CLASS_CD        varchar2(1) path 'ClassCd',
                                    ORIG_COUNTRY_CD varchar2(2) path 'OrigCountryCd',
                                    DEST_COUNTRY_CD varchar2(2) path 'DestCountryCd') x
where t.id = 1;


А результате нин одной записи.(
7 апр 16, 12:34    [19027187]     Ответить | Цитировать Сообщить модератору
 Re: Разъяснение по XMLTable  [new]
Hannibass
Member

Откуда:
Сообщений: 141
Блин неправильные имена таблиц и полей. Извиняюсь!!!
7 апр 16, 12:38    [19027209]     Ответить | Цитировать Сообщить модератору
 Re: Разъяснение по XMLTable  [new]
Hannibass
Member

Откуда:
Сообщений: 141
Правильно:
SELECT t.id, x.ITEM_ID,x.CLASS_CD, x.ORIG_COUNTRY_CD, x.DEST_COUNTRY_CD
FROM test_xml_tab t,XMLTABLE('/ips/MailItem'
                            PASSING t.xml_text
                            COLUMNS ITEM_ID         varchar2(13 char) PATH '@ItemId',
                                    CLASS_CD        varchar2(1) path 'ClassCd',
                                    ORIG_COUNTRY_CD varchar2(2) path 'OrigCountryCd',
                                    DEST_COUNTRY_CD varchar2(2) path 'DestCountryCd') x
where t.id = 1;
7 апр 16, 12:40    [19027223]     Ответить | Цитировать Сообщить модератору
 Re: Разъяснение по XMLTable  [new]
K790
Member

Откуда:
Сообщений: 634
Hannibass,

версия БД? полное выполнение в sql+ с выводом результата?
7 апр 16, 12:45    [19027250]     Ответить | Цитировать Сообщить модератору
 Re: Разъяснение по XMLTable  [new]
Hannibass
Member

Откуда:
Сообщений: 141
select * from v$version


BANNERCON_ID
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production0
PL/SQL Release 12.1.0.2.0 - Production0
CORE 12.1.0.2.0 Production0
TNS for Linux: Version 12.1.0.2.0 - Production0
NLSRTL Version 12.1.0.2.0 - Production0
7 апр 16, 13:01    [19027345]     Ответить | Цитировать Сообщить модератору
 Re: Разъяснение по XMLTable  [new]
Vint
Member

Откуда: Москва
Сообщений: 4564
Hannibass,
если такое парситься:
SELECT  x.ITEM_ID,x.CLASS_CD, x.ORIG_COUNTRY_CD, x.DEST_COUNTRY_CD
FROM XMLTABLE('/ips/MailItem'
                            PASSING xmltype('<ips>
                    <MailItem ItemId="RF055214840CN">
                      <ClassCd>U</ClassCd>
                      <OrigCountryCd>CN</OrigCountryCd>
                      <DestCountryCd>BY</DestCountryCd>
                      <ItemEvent>
                        <TNCd>TN031</TNCd>
                        <Date>2015-08-01T13:49:50</Date>
                        <OfficeCd>BYMSQC</OfficeCd>
                        <ConditionCd>30</ConditionCd>
                      </ItemEvent>
                    </MailItem>
                    <MailItem ItemId="RF056229911CN">
                      <ClassCd>U</ClassCd>
                      <OrigCountryCd>CN</OrigCountryCd>
                      <DestCountryCd>BY</DestCountryCd>
                      <ItemEvent>
                        <TNCd>TN031</TNCd>
                        <Date>2015-08-01T13:49:50</Date>
                        <OfficeCd>BYMSQC</OfficeCd>
                        <ConditionCd>30</ConditionCd>
                      </ItemEvent>
                    </MailItem>
                  </ips>')
                            COLUMNS ITEM_ID         varchar2(13 char) PATH '@ItemId',
                                    CLASS_CD        varchar2(1) path 'ClassCd',
                                    ORIG_COUNTRY_CD varchar2(2) path 'OrigCountryCd',
                                    DEST_COUNTRY_CD varchar2(2) path 'DestCountryCd') x

то либо руки либо голова.. выбирай сам)
7 апр 16, 13:11    [19027393]     Ответить | Цитировать Сообщить модератору
 Re: Разъяснение по XMLTable  [new]
Hannibass
Member

Откуда:
Сообщений: 141
K790
Hannibass,

версия БД? полное выполнение в sql+ с выводом результата?


результат выполнения моего вышеуказанного селекта:

IDITEM_IDCLASS_CDORIG_COUNTRY_CDDEST_COUNTRY_CD
1RF055214840CNUCNBY
1RF056229911CNUCNBY
7 апр 16, 13:12    [19027396]     Ответить | Цитировать Сообщить модератору
 Re: Разъяснение по XMLTable  [new]
Hannibass
Member

Откуда:
Сообщений: 141
Vint, что такое не так??
7 апр 16, 13:15    [19027414]     Ответить | Цитировать Сообщить модератору
 Re: Разъяснение по XMLTable  [new]
Egoza
Guest
Hannibass
результат выполнения моего вышеуказанного селекта:

IDITEM_IDCLASS_CDORIG_COUNTRY_CDDEST_COUNTRY_CD
1RF055214840CNUCNBY
1RF056229911CNUCNBY

А что ожидали получить?
7 апр 16, 13:27    [19027500]     Ответить | Цитировать Сообщить модератору
 Re: Разъяснение по XMLTable  [new]
Hannibass
Member

Откуда:
Сообщений: 141
Egoza
Hannibass
результат выполнения моего вышеуказанного селекта:

IDITEM_IDCLASS_CDORIG_COUNTRY_CDDEST_COUNTRY_CD
1RF055214840CNUCNBY
1RF056229911CNUCNBY

А что ожидали получить?

Да мне это и надо.
7 апр 16, 15:40    [19028453]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить