我将 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”等。不过,我不知道与该标签关联的元素的完整列表。
谢谢
我。
最佳答案
具体取决于您的数据存储方式(即,表中是否有 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
提取数据后,应该很容易计算或以其他方式聚合数据。
关于xml - 甲骨文11g : Extracting and Counting XML elements,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11105491/