0

我在 Oracle 数据库 (11gR2) 中有一个简单的表结构。使用通用术语,我有“组”而不是包含一个或多个“项目”;即一对多的关系。所以“item”表有一个“group_id”字段,它是“group”表上相同字段的外键。

有没有可以用来从数据库中提取这些数据作为 XML 的查询?我希望结果是这样的:

<groups>
  <group name="group1">
    <item name="item1">
    <item name="item2">
  </group>
  <group name="group2">
    <item name="item3">
    <item name="item4">
  </group>
</groups>

我开始在 PL/SQL 过程中将其编写为循环中的循环,即循环遍历组,然后遍历每个组中的项目,但这似乎冗长。我希望有一个使用“XMLTable”或“XMLForest”的查询可以用于这种结构。

4

1 回答 1

2

使用 XmlAgg(聚合你的内容GROUP BY):

SELECT      CAST(
               XmlElement("groups",
                   XmlAgg(
                       XmlElement(
                           "group"
                          ,XmlAttributes(g.name as "name")
                          ,XmlAgg(
                              XmlElement(
                                   "item"
                                  ,XmlAttributes(i.name as "name")
                              )
                           )
                       )
                   )
               )
               AS VARCHAR2(4000)
            ) MY_XML
FROM        group g
 INNER JOIN item  i ON i.groupid = g.id
GROUP BY    g.name
;

请参阅 XMLAgg 文档: http ://docs.oracle.com/cd/B28359_01/appdev.111/b28369/xdb13gen.htm#i1032865

于 2013-12-13T17:26:11.247 回答