从Oracle Clob XML中选择属性值

时间:2016-02-04 15:23:32

标签: sql xml oracle plsql

我的数据库中有以下clob xml:

<HXML
xmlns:dt="urn:schemas-microsoft-com:datatypes">
<BATCH>
    <FOLDER Class="SDER" AppUserLocation="0001" AppUserID="">
        <DOCUMENTS>
            <DOCUMENT ScanDocID="28/11/2013 0805353505 LNFDDDF" Type="RLAFASDFSSESS" Processed="Y">
                <IMAGE FileName="\\sitFDAF16\FDS\radCB056.pdf" CRC="FSDAF"></IMAGE>
            </DOCUMENT>
             <DOCUMENT ScanDocID="28/11/2013 343 LNFDDDF" Type="FDSF" Processed="Y">
                <IMAGE FileName="\\sitFDAF16\FDS\radCB056.pdf" CRC="FSDAF"></IMAGE>
            </DOCUMENT>
             <DOCUMENT ScanDocID="28/11/2013 3434 LNFDDDF" Type="FASDFASD" Processed="Y">
                <IMAGE FileName="\\sitFDAF16\FDS\radCB056.pdf" CRC="FSDAF"></IMAGE>
            </DOCUMENT>
        </DOCUMENTS>
    </FOLDER>
</BATCH>

我正在尝试从DOCUMENT标记返回ScanDocID属性。

我尝试了以下内容:

with 
   xmlData 
    as 
( select
      XMLTYPE(x.xmldoc) xml 
 from
      c_xml_doc x 
  where x.cxd_id in ('269814','269815','247336','269816')) 
      select 
          x.xml.EXTRACT('//HXML/BATCH/FOLDER/DOCUMENTS/DOCUMENT["ScanDocID"]/text()')
  from 
      xmlData x ;

但是我没有返回任何行。我在元素上尝试了类似的查询,并返回正确的结果

1 个答案:

答案 0 :(得分:1)

EXTRACTEXTRACTVALUE已被弃用。相反,您应该使用XMLTABLE,例如:

with 
   xmlData 
    as 
( select 1 id,
      XMLTYPE('<HXML
xmlns:dt="urn:schemas-microsoft-com:datatypes">
<BATCH>
    <FOLDER Class="SDER" AppUserLocation="0001" AppUserID="">
        <DOCUMENTS>
            <DOCUMENT ScanDocID="28/11/2013 0805353505 LNFDDDF" Type="RLAFASDFSSESS" Processed="Y">
                <IMAGE FileName="\\sitFDAF16\FDS\radCB056.pdf" CRC="FSDAF"></IMAGE>
            </DOCUMENT>
             <DOCUMENT ScanDocID="28/11/2013 343 LNFDDDF" Type="FDSF" Processed="Y">
                <IMAGE FileName="\\sitFDAF16\FDS\radCB056.pdf" CRC="FSDAF"></IMAGE>
            </DOCUMENT>
             <DOCUMENT ScanDocID="28/11/2013 3434 LNFDDDF" Type="FASDFASD" Processed="Y">
                <IMAGE FileName="\\sitFDAF16\FDS\radCB056.pdf" CRC="FSDAF"></IMAGE>
            </DOCUMENT>
        </DOCUMENTS>
    </FOLDER>
</BATCH>
</HXML>') xmld
 from
      dual x) 
select x.id,
       xt.scan_doc_id,
       xt.image_file_name,
       xt.image_crc
from   xmlData x,
       xmltable('/HXML/BATCH/FOLDER/DOCUMENTS/DOCUMENT'
                passing x.xmld
                columns scan_doc_id varchar2(50) path '@ScanDocID',
                        image_file_name varchar2(100) path 'IMAGE/@FileName',
                        image_crc varchar2(20) path 'IMAGE/@CRC') xt;