【问题标题】:What is the fastest way to query in batches a large xml stored in xmltype column in oracle database table?批量查询存储在oracle数据库表中xmltype列中的大型xml的最快方法是什么?
【发布时间】:2017-03-13 19:22:35
【问题描述】:
我有一个 Oracle xmldb 表,其中包含一个 xmltype 列,该列有多个大型 xml 记录。每个 xml 的大小约为 100MB,其中一部分 xml 具有重复元素。
每个 xml 中的重复元素可能有几千个。
我只需要阅读重复的元素。
在批量元素集合中读取重复元素的最佳方法是什么?假设批量大小可以一次是 50 个重复元素。
我已经使用 DBMS_XMLGEN 编写了代码以批量高效地编写 xml,但无法找到一种方法来进行类似的批量读取。
请提出一种有效的方法。
【问题讨论】:
标签:
xml
oracle
plsql
xmltype
oracle-xml-db
【解决方案1】:
我已经想出几种方法来使用一个 sql 查询来做到这一点。
方法一:
在 sql 查询中:
1. 创建一个xmltable,其中包含一个用于重复xml 元素的列。
2. 选择每个重复元素所在的列
select elements.*
from
xmltable('//*/parent[@name="E1"].*' passing xml
columns
repeating_element xmltype path '/repeatingElement') elements;
方法二:
使用table() 运算符:
查询看起来像这样:
select elements.*
from
table(xmlsequence(extract(xml, '//*/parent[@name="E1"]/repeatingElement'))) elements;
使用上述任一查询,在该sql查询上打开一个带limit子句的游标,批量查询记录。