我需要从oracle 11数据库生成下面给出的xml格式。所有标记名称都是静态字符串。节点D1,D2,D3等的数据我可以使用2个表连接在单个查询中获取。
如果我使用XMLElement(" Node1",XMLElement(" Node2",XMLElement(" Node3",XMLElement(" D1", ..... 然后甚至Node1,Node2返回每行数据。我只需要在顶部打开并在底部关闭一次就需要Node1和Node2。知道我该怎么办?
<Node1>
<Node2 key = "XYZ">
<Node3>
<D1> R1F1 </D1>
<D2> R1F2 </D2>
<D3> R1F3 </D3>
</Node3>
<Node3>
<D1> R2F1 </D1>
<D2> R2F2 </D2>
<D3> R2F3 </D3>
</Node3>
<Node3>
<D1> R3F1 </D1>
<D2> R3F2 </D2>
<D3> R3F3 </D3>
</Node3>
</Node2>
</Node1>
答案 0 :(得分:0)
请尝试
WITH
Dat (c1, c2, c3) AS (
SELECT 'R1F1', 'R1F2', 'R1F3' FROM DUAL UNION ALL
SELECT 'R2F1', 'R2F2', 'R2F3' FROM DUAL UNION ALL
SELECT 'R3F1', 'R3F2', 'R3F3' FROM DUAL
)
SELECT
XMLSerialize(CONTENT XMLElement("Node1", XMLElement("Node2", XMLAttributes ('XYZ' AS "key"),(SELECT XMLAgg(XMLElement("Node3", XMLElement("D1", c1), XMLElement("D2", c2), XMLElement("D3", c3))) FROM Dat)))) doc FROM DUAL
;
返回Oracle 11.2:<Node1><Node2 key="XYZ"><Node3><D1>R1F1</D1><D2>R1F2</D2><D3>R1F3</D3></Node3><Node3><D1>R2F1</D1><D2>R2F2</D2><D3>R2F3</D3></Node3><Node3><D1>R3F1</D1><D2>R3F2</D2><D3>R3F3</D3></Node3></Node2></Node1>