Нужен XML из родительской и дочерней таблиц из запроса Oracle SQL

#sql #xml #oracle

Вопрос:

В проекте, над которым я работаю, нам нужно создать XML и передать его интерфейсу, и я сталкиваюсь с проблемами при создании XML, содержащего данные из родительской таблицы и ее последующей дочерней таблицы.

родительская таблица :- Отдел должен быть таким

 dept_id     dept_name
1           History
2           Biology
 

Дочерняя таблица :- сотрудник должен быть таким

 emp_id      emp_name     dept_id
1           Helen         1
2           Martha        1 
3           John          1
4           Carol         2
 

Таким образом, полученный XML-файл должен быть похож на идентификатор отдела=1

 `<department>
<dept_id>1</dept_id>
<dept_name>History</dept_name>
</department>
<employee>
<emp_id>1</emp_id>
<emp_name>Helen</emp_name>
</employee>
<employee>
<emp_id>2</emp_id>
<emp_name>Martha</emp_name>
</employee>
<employee>
<emp_id>3</emp_id>
<emp_name>John</emp_name>
</employee>'
 

Если кто-нибудь знает лучший способ сделать это, то это было бы очень полезно.
Заранее спасибо

Комментарии:

1. Лучший способ, чем что? Чем вы сейчас занимаетесь и какие у вас проблемы? У вас также есть фрагмент XML, а не действительный документ — нет корневого узла. Вы уверены, что это именно тот формат, который вы ищете?

Ответ №1:

Что-то вроде этого (с узлами сотрудников в узле отдела, так что это не фрагмент):

 SELECT XMLELEMENT(
         "department",
         XMLFOREST(
           e.dept_id AS "dept_id",
           d.dept_name AS "dept_name"
         ),
         XMLAGG(
           XMLELEMENT(
             "employee",
             XMLFOREST(
               emp_id AS "emp_id",
               emp_name AS "emp_name"
             )
           )
         )
       )
FROM   employees e
       INNER JOIN departments d
       on ( e.dept_id = d.dept_id )
WHERE  e.dept_id = 1
GROUP BY e.dept_id, d.dept_name;
 

Комментарии:

1. Большое спасибо… Я искал только такой запрос.

2. @user1654571 Если этот или любой другой ответ ответил на ваш вопрос, вы можете отметить его как принятый (поставьте зеленую галочку под кнопками голосования слева от ответа) — это даст другим пользователям знать, что ваша проблема решена.

3. Еще раз спасибо… Готово и спасибо за помощь новичку 🙂