Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Oracle上使用SQL查询生成XML_Sql_Xml_Oracle_Xslt - Fatal编程技术网

如何在Oracle上使用SQL查询生成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

我在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,理想情况下如下所示:

<?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。