0

EXTRACTVALUE を使用してテーブルから select ステートメントを使用して値を抽出しようとすると、XML ファイル (20MB) があり、非常に長い時間 (時間) かかります。テーブルには XMLTYPE として XML_DATA が含まれています。SQL クエリを調整するか、大きな 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 の直後にあることを確認してください。これは、PATH キーワードの直後にある XPath で子を読み取るすべての親要素を検索する XPath です。この場合、text() は Name 要素のテキスト コンテンツを読み取ります。

于 2013-09-12T19:42:22.217 に答える