如何在Oracle中将动态行数据转换为XML?

时间:2013-03-05 14:40:12

标签: sql oracle oracle11g

我在表格中有一些看起来像这样的数据。

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;

..使用这样的XML格式:

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

我不得不求助于PL / SQL,因为我无法使用SQL动态构建标记名称?这可能是使用SQL方法Oracle 11g还是我必须继续PL / SQL方式?

感谢。

3 个答案:

答案 0 :(得分:7)

你可以这样做:

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

Here is a sqlfiddle demo

答案 1 :(得分: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;

答案 2 :(得分:0)

试试这个

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

任何澄清请告诉我!