Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql oracle XML到数据库表_Sql_Xml_Oracle_Oracle11g - Fatal编程技术网

Sql oracle 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

我有这样的XML。我无法将其解析为表

  <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