2013-03-05 75 views
0

我在表中看起來像這樣有一些數據。如何在Oracle中將動態行數據轉換爲XML?

ID  KEY  VAL 
---- ----- ----- 
1  name  Bob 
1  age  30 
1  gender male 
2  name  Susan 
2  age  50 

有可能得到這個查詢的輸出:

SELECT * 
    FROM my_table 
WHERE id = 1; 

..in一個XML格式是這樣的:

<DATA> 
    <NAME>Bob</NAME> 
    <AGE>30></AGE> 
    <GENDER>MALE</MALE> 
</DATA> 

我不得不求助於PL/SQL因爲我無法使用SQL動態地構建標籤名稱?這可能使用SQL方法Oracle 11g或我必須繼續使用PL/SQL方式嗎?

謝謝。

回答

6

你可以這樣說:

select xmlelement("DATA",xmlagg(xmlelement(evalname(KEY), VAL))) 
from my_table 
where ID = 1 

Here is a sqlfiddle demo

+4

+1:不知道'evalname'。 – 2013-03-05 14:48:23

+0

我也沒有。有趣的是,當給出第一個參數的列名時,XMLELEMENT將其解釋爲字符串文字。 – 2013-03-05 19:16:28

0

你應該能夠用純SQL來做到這一點:

select XMLELEMENT("DATA", 
     XMLELEMENT("NAME", n.val), 
     XMLELEMENT("AGE", a.val), 
     XMLELEMENT("GENDER", g.val)) 
from my_table n 
inner join my_table a on n.id = a.id 
inner join my_table g on n.id = g.id 
where n.key = "name" 
and a.key = "age" 
and g.key = "gender" 
and n.id = 1; 
+0

這不適用於我,因爲我不知道密鑰的名稱。它必須是動態的。對不起,我不是更詳細。 – 2013-03-05 14:47:02

0

只是試試這個

SELECT xmlelement("Data",xmlelement("Name",name), 
xmlelement("Age",age), 
xmlelement("Gender",gender)) "xml_format" 
     FROM emp_tab where rownum=1; 

任何clari fication plz讓我知道!