powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / XMLTABLE отделить блоки с одинаковым набором атрибутов друг от друга
3 сообщений из 3, страница 1 из 1
XMLTABLE отделить блоки с одинаковым набором атрибутов друг от друга
    #39986542
anvano
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть некоторый XML документ, в котором блоки <PARENT> могут повторяться с одинаковым атрибутом ID, но разным набором дочерних тегов.

Мне нужно каждый PARENT со своим собственным набором дочерних тегов выделить как отдельную сущность.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
  SELECT v.*
  FROM XMLTABLE('//PARENT/SUB' PASSING XMLTYPE('<ROOT>
    <PARENT id="1">
      <SUB attr="10"/>
      <SUB attr="20"/>
    </PARENT>
    <PARENT id="1">
      <SUB attr="30"/>
    </PARENT>
    <PARENT id="2">
      <SUB attr="10"/>
    </PARENT>
   </ROOT>')
  COLUMNS                                       
    POS   FOR ORDINALITY,
    ID    NUMBER  PATH './../@id',
    attr  NUMBER  PATH '@attr' 
  ) v



Запрос выдаёт:
POSIDATTR1110212031304210

Все строки с одним и тем же ID=1 идут подряд и сливаются, непонятно где закончится первый PARENT и где начался второй.

Можно ли как-то в результате запроса понять где заканчивается один блок <PARENT ="1"> и начинается другой ?
Т.е. как-то получить например порядковый номер тега <PARENT> в пределах родительского тега?


P.S: Пока решил вопрос двойной обработкой (т.е. сначала вытаскиваю целиком блоки, а потом каждый блок обрабатываю как отдельный XML документ), но что-то это не очень оптимально.

--------------------------------------------------------------
Запомните, товарищи офицеры, чтобы ничего не делать, надо уметь делать все.
...
Рейтинг: 0 / 0
XMLTABLE отделить блоки с одинаковым набором атрибутов друг от друга
    #39986544
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
with v as (select '<ROOT>
    <PARENT id="1">      <SUB attr="10"/>      <SUB attr="20"/>    </PARENT>
    <PARENT id="1">      <SUB attr="30"/>    </PARENT>
    <PARENT id="2">      <SUB attr="10"/>    </PARENT>
   </ROOT>' x from dual)
 SELECT x1.pos, x1.id
      , x2.*
  FROM v
     , XMLTABLE('//PARENT' PASSING XMLTYPE(v.x)
                COLUMNS                                       
                  POS   FOR ORDINALITY,
                  ID    NUMBER  PATH './@id'
                  , p xmltype path './node()'
    ) x1
    , xmltable('/SUB' passing x1.p
              columns attr number path '@attr'   
     ) x2
  ;
...
Рейтинг: 0 / 0
XMLTABLE отделить блоки с одинаковым набором атрибутов друг от друга
    #39986879
anvano
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо!
В принципе почти тоже, к чему пришел я только одним запросом :)
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / XMLTABLE отделить блоки с одинаковым набором атрибутов друг от друга
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]