Oracle 11g:提取和计算XML元素

时间:2012-06-19 16:41:32

标签: xml oracle xquery

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

<?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'等。但我不知道与标签相关的整个元素列表。

谢谢,

1 个答案:

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

一旦提取了数据,就应该很容易计算或汇总数据。