2016-02-04 9 views
0

У меня есть следующий Clob XML в моей базе данных:Выбор значения атрибута из Oracle 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> 

И я пытаюсь вернуть атрибут 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

EXTRACT и EXTRACTVALUE были устарели. Вместо этого вы должны использовать 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; 
Смежные вопросы