powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / XmlAgg into XmlForest
3 сообщений из 3, страница 1 из 1
XmlAgg into XmlForest
    #39971851
rnt777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго дня!
Изучаю 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
XmlAgg into XmlForest
    #39971863
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
XmlAgg into XmlForest
    #39971870
rnt777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
123йй,

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

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


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