Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / XmlAgg into XmlForest / 3 сообщений из 3, страница 1 из 1
22.06.2020, 14:30
    #39971851
rnt777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XmlAgg into XmlForest
Всем доброго дня!
Изучаю XML в Оракле (11.2.0.4.0). Возник вопрос, вроде простой, но что-то решение не найду.
Люди знающие, подскажите, пожалуйста, как в примере ниже, избавиться от тега "a", оставив его дочерние ветки?

запрос
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
with xR as (select 11 P_Id
            from dual),
    xPs as (select 11 P_Id,
                   444 Num,
                   333.22 SumTotal
            from dual),
     xP as (select 444 Num,
                   '123456789' Acc,
                   111.11 Sum
            from dual
            union all
            select 444 Num,
                   '987654321' Acc,
                   222.11 Sum
            from dual)

select xmlelement("Root",
         xmlforest(
           r.p_Id as "p_Id",
           xmlforest(
             ps.Num       as "Num",
             ps.SumTotal  as "SumTotal",
             xmlagg(
               xmlelement("Payment",
                 xmlforest(
                       p.Acc as "Acc",
                       p.Sum as "Sum"
                 )
               )
             ) "a"
           ) "Payments"
         )
       ) x
from xP p, xPs ps, xR r
where ps.P_Id = r.P_Id
and p.Num = ps.Num




результат
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<?xml version="1.0"?>
<Root>
  <p_Id>11</p_Id>
  <Payments>
    <Num>444</Num>
    <SumTotal>333.22</SumTotal>
    <a>
      <Payment>
        <Acc>123456789</Acc>
        <Sum>111.11</Sum>
      </Payment>
      <Payment>
        <Acc>987654321</Acc>
        <Sum>222.11</Sum>
      </Payment>
    </a>
  </Payments>
</Root>




ожидаемый результат
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<?xml version="1.0"?>
<Root>
  <p_Id>11</p_Id>
  <Payments>
    <Num>444</Num>
    <SumTotal>333.22</SumTotal>
    <Payment>
      <Acc>123456789</Acc>
      <Sum>111.11</Sum>
    </Payment>
    <Payment>
      <Acc>987654321</Acc>
      <Sum>222.11</Sum>
    </Payment>
  </Payments>
</Root>




Понимаю, что нельзя добавить бесконечный список "Payment" в xmlforest.
Может быть список элементов Payment можно как-то подзапросом вытащить?
XmlAgg можно объявить как "Payments", но нужны элементы "Num" и "SumTotal".
...
Рейтинг: 0 / 0
22.06.2020, 15:15
    #39971863
123йй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XmlAgg into XmlForest
rnt777,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select xmlelement("Root",
                       xmlelement("p_Id", r.p_Id),
                       xmlelement("Payments",
                                  xmlelement("Num", ps.Num),
                                  xmlelement("SumTotal", ps.SumTotal),
                                  xmlagg(xmlelement("Payment",
                                                    xmlelement("Acc", p.Acc),
                                                    xmlelement("Sum", p.Sum))))) x
from   xP p, xPs ps, xR r
where  ps.P_Id = r.P_Id and
       p.Num = ps.Num
...
Рейтинг: 0 / 0
22.06.2020, 15:24
    #39971870
rnt777
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
XmlAgg into XmlForest
123йй,

Легко и просто, спасибо! А то понесло меня в лес. Тему можно закрывать.

"Беги xmlforest, беги" отсюда
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / XmlAgg into XmlForest / 3 сообщений из 3, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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