oracle 10g中extractvalue的性能调优

时间:2013-09-12 10:18:18

标签: sql xml oracle

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

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

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

1 个答案:

答案 0 :(得分: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元素的文本内容。