如何在Oracle上使用SQL查询生成XML
我在Oracle上有一个非标准化的DB表,其中包含以下示例数据: repdate | house | house_type | house_addr | person_name | gender | rent_amt ---------|-------|------------|------------|-------------|--------|---------- 01/03/16 | hs01 | 4-bed | 1 pine st | Bruce | M | 500 01/03/16 | hs01 | 4-bed | 1 pine st | Alfred | M | 300 01/03/16 | hs01 | 4-bed | 1 pine st | Selina | F | 400 01/03/16 | hs03 | 1-bed | 4 baker rd | Joan | F | 200 01/03/16 | hs02 | 3-bed | 7 pod st | Barry | M | 400 01/03/16 | hs02 | 3-bed | 7 pod st | Caitlin | F | 400 报告日期|房屋|房屋类型|房屋地址|人名|性别|租金|金额 ---------|-------|------------|------------|-------------|--------|---------- 2016年3月1日| hs01 | 4床|松街1号|布鲁斯| M | 500 2016年3月1日| hs01 | 4床| 1松树街|阿尔弗雷德| M | 300 2016年3月1日| hs01 | 4床|松街1号|塞利纳| F | 400 2016年3月1日| hs03 |一张床|贝克路4号|琼| F | 200 2016年3月1日| hs02 |三床| 7舱街|巴里| M | 400 2016年3月1日| hs02 |三床| 7舱街|凯特琳| F | 400 我想从这个表中生成一个规范化的XML,理想情况下如下所示:如何在Oracle上使用SQL查询生成XML,sql,xml,oracle,xslt,Sql,Xml,Oracle,Xslt,我在Oracle上有一个非标准化的DB表,其中包含以下示例数据: repdate | house | house_type | house_addr | person_name | gender | rent_amt ---------|-------|------------|------------|-------------|--------|---------- 01/03/16 | hs01 | 4-bed | 1 pine st | Bruce | M
<?xml version="1.0" encoding="UTF-8"?>
<records repdate="01/03/16">
<record house="hs01" house_type="4-bed" house_addr="1 pine st">
<lineitems>
<lineitem person_name="Bruce" gender="M" rent_amt="500" />
<lineitem person_name="Alfred" gender="M" rent_amt="300" />
<lineitem person_name="Selina" gender="F" rent_amt="400" />
</lineitems>
</record>
<record house="hs02" house_type="3-bed" house_addr="7 pod st">
<lineitems>
<lineitem person_name="Barry" gender="M" rent_amt="400" />
<lineitem person_name="Caitlin" gender="F" rent_amt="400" />
</lineitems>
</record>
<record house="hs03" house_type="1-bed" house_addr="4 baker rd">
<lineitems>
<lineitem person_name="Joan" gender="F" rent_amt="200" />
</lineitems>
</record>
</records>
我尝试了XMLElement和XMLAgg函数,但有点卡住了。
我还做了一些研究,可以为此生成一个简单的XML,并使用XSLT转换来应用样式表以获得所需的结果
哪种方法更好,转换数据的最简单方法是什么
感谢任何能够帮助我们了解这一点的人。谢谢。我认为这是实现它最简单的方法。查询将生成不同日期的单独xml
select xmlelement("records", XMLATTRIBUTES(repdate as "repdate"), xmlagg(rec order by repdate, house))
from ( select xmlelement(
"record"
, XMLATTRIBUTES(house as "house", house_type as "house_type", house_addr as "house_addr")
, xmlelement(
"lineitems"
, xmlagg(
xmlelement(
"lineitem"
, XMLATTRIBUTES(person_name as "person_name", gender as "gender", rent_amt as "rent_amt")))))
rec
, repdate
, house
from your_table
group by house
, house_type
, house_addr
, repdate)
group by repdate
谢谢,来自
xmlement(“记录”)的子查询与我所拥有的差不多。添加xmlement(“记录”…
在顶层生成1行,而不是我的3个记录行。您知道结果行中可以包含多少字符是否有任何限制吗?如果有更多数据,将有1行结果流到列中吗?此页显示4gb用于xmltype sotre,单位为db。