Sql oracle XML到数据库表
我有这样的XML。我无法将其解析为表Sql oracle XML到数据库表,sql,xml,oracle,oracle11g,Sql,Xml,Oracle,Oracle11g,我有这样的XML。我无法将其解析为表 <REQMST> <ROW> <REQ_ID>668 </REQ_ID> <RequestDetails> <REQ_DTL_ID>845</REQ_DTL_ID> <INTERFACE_REFNUM>1</INTERFACE_REFNUM> </RequestDetails
<REQMST>
<ROW>
<REQ_ID>668 </REQ_ID>
<RequestDetails>
<REQ_DTL_ID>845</REQ_DTL_ID>
<INTERFACE_REFNUM>1</INTERFACE_REFNUM>
</RequestDetails>
<RequestDetails>
<REQ_DTL_ID>846</REQ_DTL_ID>
<INTERFACE_REFNUM>2</INTERFACE_REFNUM>
</RequestDetails>
</ROW>
</REQMST>
668
845
1.
846
2.
我试图使用
select *
FROM XMLTABLE('/REQMST/ROW'
PASSING
xmltype('
<REQMST>
<ROW>
<REQ_ID>668 </REQ_ID>
<RequestDetails>
<REQ_DTL_ID>845</REQ_DTL_ID>
<INTERFACE_REFNUM>1</INTERFACE_REFNUM>
</RequestDetails>
<RequestDetails>
<REQ_DTL_ID>846</REQ_DTL_ID>
<INTERFACE_REFNUM>2</INTERFACE_REFNUM>
</RequestDetails>
</ROW>
</REQMST>')
COLUMNS
--describe columns and path to them:
REQ_ID varchar2(20) PATH './REQ_ID',
REQ_DTL_ID varchar2(20) PATH './RequestDetails/REQ_DTL_ID',
INTERFACE_REFNUM varchar2(20) PATH './RequestDetails/INTERFACE_REFNUM'
) xmlt
;
选择*
从XMLTABLE(“/requmst/ROW”
经过
xmltype('
668
845
1.
846
2.
')
柱
--描述列及其路径:
请求ID varchar2(20)路径“/”请求ID“,
REQ_DTL_ID varchar2(20)路径'./RequestDetails/REQ_DTL_ID',
接口\u REFNUM varchar2(20)路径'./RequestDetails/INTERFACE\u REFNUM'
)xmlt
;
我得到错误ORA-19279:XPTY0004-XQuery动态类型不匹配:预期的单例序列-得到多项序列
如果只有一个RequestDetails,它就可以工作了。您需要使用与父项相同的技术,从
RequestDetails
标记中再向下一级获取详细信息
使用列名xml
获取xml作为xmltype列,然后在其上使用xmltable获取更多详细信息:
试试这个:
select xmlt.req_id, x.REQ_DTL_ID, x.INTERFACE_REFNUM
FROM XMLTABLE('/REQMST/ROW'
PASSING
xmltype('
<REQMST>
<ROW>
<REQ_ID>668 </REQ_ID>
<RequestDetails>
<REQ_DTL_ID>845</REQ_DTL_ID>
<INTERFACE_REFNUM>1</INTERFACE_REFNUM>
</RequestDetails>
<RequestDetails>
<REQ_DTL_ID>846</REQ_DTL_ID>
<INTERFACE_REFNUM>2</INTERFACE_REFNUM>
</RequestDetails>
</ROW>
</REQMST>')
COLUMNS
--describe columns and path to them:
REQ_ID varchar2(20) PATH 'REQ_ID',
xml xmltype PATH 'RequestDetails'
) xmlt, xmltable('/RequestDetails'
passing xmlt.xml
columns
REQ_DTL_ID varchar2(20) PATH 'REQ_DTL_ID',
INTERFACE_REFNUM varchar2(20) PATH 'INTERFACE_REFNUM'
) x;
REQ_ID REQ_DTL_ID INTERFACE_REFNUM
668 845 1
668 846 2