2014-11-09 68 views
0

我需要從oracle 11數據庫生成下面給出的xml格式。所有標籤名稱都是靜態字符串。節點D1,D2,D3等的數據我能夠使用2表連接進行單個查詢。如果我使用XMLElement(「Node1」,XMLElement(「Node2」,XMLElement(「Node3」,XMLElement(「D1」,...),那麼即使Node1,Node2也會返回每一行數據我需要節點1和節點只有一次在底部在頂部打開和關閉任何想法,我怎麼能做到這一點從oracle11 DB生成XML

<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

請嘗試

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>