#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. Еще раз спасибо… Готово и спасибо за помощь новичку 🙂