从Oracle SQL查询中需要来自父表和子表的XML

从Oracle SQL查询中需要来自父表和子表的XML

问题描述:

在我正在处理的项目中,我们需要创建一个XML并将其传递给接口,并且在创建包含父数据的XML时遇到问题表及其随后的子表。从Oracle SQL查询中需要来自父表和子表的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应该是这样的部门ID = 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片段,而不是一个有效的文件 - 没有根节点。你确定这是你要找的格式吗? –

像这样的东西(在部门节点员工节点,所以它不是一个片段):

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; 
+0

非常感谢... 我一直在寻找这种查询。 – user1654571

+0

@ user1654571如果此答案或其他答案回答了您的问题,您可以将其标记为已接受(在答案左侧的投票按钮下方勾选绿色复选标记) - 这会让其他用户知道您的问题已得到解决。 – MT0

+0

再次感谢... 完成并感谢您帮助newb :) – user1654571