我的数据库中有以下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 ;
但是我没有返回任何行。我在元素上尝试了类似的查询,并返回正确的结果
答案 0 :(得分: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;