2

我将 XML 类型的数据存储在 Oracle 11g 数据库中。我的数据的粗略版本如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<record>
<record_number>12345</record_number>
<record_type> book </record_type>
</record>

数据操作功能,例如:

SELECT XML_Type FROM Metadata

指定每行包含格式良好的 XML 文件(具有许多标签和元素)的列。我正在努力提取和计算每个<record_type>元素的出现次数。例如,我想知道 XML 标记<record_type>有多少次包含“book”、“article”等元素。不过,我不知道与该标记关联的整个元素列表。

谢谢,

我。

4

1 回答 1

3

取决于您的数据的确切存储方式(即表中是否有 1 行是 1 个看起来像您发布的示例的 XML 文档,或者表中是否有 1 行是 1 个具有许多不同记录标签的 XML 文档它)最简单的方法是

SQL> ed
Wrote file afiedt.buf

  1  with t as (select '<?xml version="1.0" encoding="UTF-8"?>
  2                     <record>
  3                       <record_number>12345</record_number>
  4                       <record_type> book </record_type>
  5                     </record>' xml
  6                from dual
  7              union all
  8              select '<?xml version="1.0" encoding="UTF-8"?>
  9                        <record>
 10                           <record_number>6789</record_number>
 11                           <record_type> magazine </record_type>
 12                        </record>' xml
 13                 from dual)
 14  select xmltype(t.xml).extract( '//record_number/text()' ) record_number,
 15         xmltype(t.xml).extract( '//record_type/text()' ) record_type
 16*   from t
SQL> /

RECORD_NUMBER        RECORD_TYPE
-------------------- ------------------------------
12345                 book
6789                  magazine

提取数据后,计算或聚合数据应该很容易。

于 2012-06-19T17:22:00.297 回答