1

特定の問題があります。列の xml clob フィールドから値を取得しようとしています。この xml は非常に大きく、この xml_clob を持つレコードが 4 万件以上あります。現在、表示されたクエリを使用して情報を取得できますが、パフォーマンスが大きな問題であることがわかりました。現在、クエリの処理には数時間かかります。このクエリの処理時間を数分短縮できるようにする必要があります。xml_schema が提供されていません。サーバーへのアクセスは非常に制限されているため、作成できるのは一時テーブルです。しかし、これはあまり役に立ちませんでした。これらの次のクエリは、「性別」のみを表示します。最短で15分かかります。

xml の例

<root>
<entry>....</entry>
<entry effective="2010012108354553" timestamp="2010012108354553" id="12345">
  <field name="Org" t="0" s="4" d="0">
    <nv>0000</nv>
  </field>
  <field name="FirstName" t="1" s="13" d="0">
    <nv>John</nv>
  </field>
  <field name="LastName" t="1" s="13" d="0">
    <nv>Doe</nv>
  </field>
<entry>
</root>

クエリ:

SELECT X.*,X2.*

        From XML_TABLE XM,
        XMLTABLE (
           'for $e in /entry
                 where $e/@type = "create"
                 and $e/@effective > 20110229
                 and $e/@effective < 20140229
                 return $e'
        passing extract(xml, '/root/entry') 
                  COLUMNS 
                  effective VARCHAR(60)  PATH  '/entry/@effective'
                ) AS X ,
        XMLTABLE (

        'for $i in /field
                 where $i/@name = "Gender"
                 return $i'


        passing X.xml 
                  COLUMNS 
                  name VARCHAR(60)  PATH  '/field/@name',
                  old_value VARCHAR(60)  PATH  '/field/ov',
                  new_value VARCHAR(60)  PATH  '/field/nv'
                ) AS X2
4

0 に答える 0