Значения таблицы вывода XML - PullRequest
0 голосов
/ 30 января 2019

Что мне нужно изменить в моем коде, чтобы получить такой вывод?

<Team Name="x">
  <Nationality nationality="a">
   <Player name="abc"/>  
   <Player name="def"/>  
  </Nationality>

  <Nationality nationality="b">
   <Player name="xyz"/>  
  </Nationality>
</Team>

На данный момент у меня есть следующий код:

SELECT XMLElement("Team", XMLATTRIBUTES(TeamName as "Name"),
(SELECT XMLElement("Nationality", XMLAttributes(nationality AS "Nationality"), 
        XMLAgg(XMLElement("Player", name)))
FROM players
WHERE team_id = 03111 
GROUP BY nationality 
))
from teams

"Средний выбор"возвращает результаты, которые я хочу, но во многих строках.Я хочу, чтобы все в одной строке, я подумал, если я поставлю «общий» XMLElement, он работает, но возвращает эту ошибку:

00000 - «однорядный подзапрос возвращает более одной строки»

Как мне решить эту проблему?

PS: У меня есть две таблицы: игроки и команды,Национальность это не таблица, а атрибут игроков

1 Ответ

0 голосов
/ 30 января 2019

Вложите ваши вызовы XMLAGG и XMLELEMENT, например (для таблицы EMP)

SELECT XMLSERIALIZE (
          CONTENT
          XMLELEMENT (
             "Department",
                XMLAGG (
                   XMLELEMENT (
                      "Job",
                       XMLATTRIBUTES (job AS "Job"),
                       XMLAGG (
                          XMLELEMENT (
                             "Employee",
                              XMLATTRIBUTES (ename AS "Name"))))))
          AS CLOB INDENT SIZE = 3) xml
FROM   emp e INNER JOIN dept d ON (d.deptno = e.deptno)
WHERE  d.dname = 'SALES'
GROUP BY e.job;

Возвращает ....

<Department>
   <Job Job="CLERK">
      <Employee Name="JAMES"/>
   </Job>
   <Job Job="MANAGER">
      <Employee Name="BLAKE"/>
   </Job>
   <Job Job="SALESMAN">
      <Employee Name="WARD"/>
      <Employee Name="ALLEN"/>
      <Employee Name="TURNER"/>
      <Employee Name="MARTIN"/>
   </Job>
</Department>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...