0

有一个 XML 文件 (20MB),当我尝试使用 EXTRACTVALUE 从表中使用 select 语句提取值时,它需要很长时间(小时)。该表包含 XML_DATA 作为 XMLTYPE 请建议我调整 SQL QUERY 或任何其他替代方法以从大型 xml 文件中提取值

SELECT EXTRACTVALUE (VALUE (Name),'*/Name') FirstName,  
.....   
FROM TB_XML_type,TABLE (XMLSEQUENCE (EXTRACT (xml_data, '*/Name'))) Name

注意: XML 格式是用户定义的。

4

1 回答 1

0

设置一个像你这样的表:

CREATE TABLE TB_XML_TYPE(XML_DATA XMLTYPE);

INSERT INTO TB_XML_TYPE(XML_DATA) 
VALUES (XMLTYPE('<a><Name>name1</Name><Name>name2</Name></a>'));

我猜 Name 元素就在你的 XML 的根元素下。如果是这样的话,这可能会更快。

SELECT XD.NAME FROM TB_XML_TYPE XT, 
    XMLTABLE('/a/Name' PASSING XT.XML_DATA
        COLUMNS NAME VARCHAR2(100) PATH 'text()') XD

结果:

NAME                                                                                               
---------------------
name1                                                                                                
name2                                                                                                

如果不是,请确保重复的路径就在 XMLTABLE 之后 - 这是查找所有父元素的 XPath,然后您在 PATH 关键字之后使用 XPath 读取其子元素。在这种情况下, text() 读取 Name 元素的文本内容。

于 2013-09-12T19:42:22.217 回答