Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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
Oracle |使用SELECT查询提取具有多个子节点的XML_Xml_Oracle - Fatal编程技术网

Oracle |使用SELECT查询提取具有多个子节点的XML

Oracle |使用SELECT查询提取具有多个子节点的XML,xml,oracle,Xml,Oracle,我在表中的clob列中有一个XML。下面给出了XML。 在SELECT查询中,我需要提取xml中的值。请帮忙 <Driver> <firstName>RAJ</firstName> <lastName>KUMAR</lastName> <licenses> <License> <licenseNumber>123456</licenseNumber> <lice

我在表中的clob列中有一个XML。下面给出了XML。 在SELECT查询中,我需要提取xml中的值。请帮忙

<Driver>
 <firstName>RAJ</firstName>
 <lastName>KUMAR</lastName>
 <licenses>
  <License>
   <licenseNumber>123456</licenseNumber>
   <licenseType code="ABC"></licenseType>
  </License>
  <License>
   <licenseNumber>XYZ123</licenseNumber>
   <licenseState code="TN"></licenseState>
   <licenseType code="General"></licenseType>
  </License>
  <License>
   <licenseNumber>PK4363</licenseNumber>
   <licenseState code="KL"></licenseState>
   <licenseType code="CS"></licenseType>
  </License>
 </licenses>
 <npiCode>9090909</npiCode>
 <DriverAddresses>
  <DriverAddress>
    <addressLine1>SFDGSDF</addressLine1>
    <city>Chennai</city>
    <DriverContacts>
      <DriverContact>
        <faxNumber>1947</faxNumber>
        <HphoneNumber>007</HphoneNumber>
        <CPhoneNumber>345</CPhoneNumber>
      </DriverContact>
     </DriverContacts>
     <state>KL</state>
     <zipCode>600088</zipCode>
    </DriverAddress>
   </DriverAddresses>
   <Drivertype code="AWD"></Drivertype>
  </Driver>
但我无法使用code=“”获取子节点和元素

谢谢,
PK

我自己明白了。这可能对其他有类似要求的人有所帮助

SELECT t.id, q.*, a.*, s.*
  FROM Driver_XML t
    LEFT JOIN XMLTABLE
   (
     '/Driver' PASSING XMLTYPE(t.Entity_Xml)
     COLUMNS FirstName     VARCHAR2(200) PATH 'firstName',
             LastName      VARCHAR2(200) PATH 'lastName',
             MiddleName    VARCHAR2(200) PATH 'middleInitial',
             NPICode       VARCHAR2(200) PATH 'npiCode',
             TypeCd        VARCHAR2(200) PATH 'type/@code',
             Locations     XMLTYPE       PATH 'DriverAddresses/DriverAddress',
             License       XMLTYPE       PATH 'licenses/License'
    ) q
    ON ( 1 = 1 )

   LEFT JOIN XMLTABLE
   (
     '/DriverAddress' PASSING q.Locations
     COLUMNS Addr1         VARCHAR2(200) PATH 'addressLine1',
             Addr2         VARCHAR2(200) PATH 'addressLine2',
             City          VARCHAR2(200) PATH 'city',
             State         VARCHAR2(200) PATH 'state',
             Zip           VARCHAR2(200) PATH 'zipCode',
             Contacts      XMLTYPE       PATH 'DriverContacts/DriverContact'
   ) a
    ON ( 1 = 1 )

   LEFT JOIN XMLTABLE
   (
     '/DriverContact' PASSING a.Contacts
     COLUMNS Fax           VARCHAR2(200) PATH 'faxNumber',
             Phone         VARCHAR2(200) PATH 'phoneNumber'
   ) s
    ON ( 1 = 1 )

  LEFT JOIN XMLTABLE
   (
     '/License' PASSING q.License
     COLUMNS licenseNumber VARCHAR2(200) PATH 'licenseNumber',
             licenseState  VARCHAR2(200) PATH 'licenseState/@code',
             licenseType   VARCHAR2(200) PATH 'licenseType/@code'
   ) u
   ON ( 1 = 1 );

您能否将您期望的输出添加到问题中?为什么您的查询不起作用-如果它出错或得到错误的结果?您不会用code=“”在xml中显示任何示例
SELECT t.id, q.*, a.*, s.*
  FROM Driver_XML t
    LEFT JOIN XMLTABLE
   (
     '/Driver' PASSING XMLTYPE(t.Entity_Xml)
     COLUMNS FirstName     VARCHAR2(200) PATH 'firstName',
             LastName      VARCHAR2(200) PATH 'lastName',
             MiddleName    VARCHAR2(200) PATH 'middleInitial',
             NPICode       VARCHAR2(200) PATH 'npiCode',
             TypeCd        VARCHAR2(200) PATH 'type/@code',
             Locations     XMLTYPE       PATH 'DriverAddresses/DriverAddress',
             License       XMLTYPE       PATH 'licenses/License'
    ) q
    ON ( 1 = 1 )

   LEFT JOIN XMLTABLE
   (
     '/DriverAddress' PASSING q.Locations
     COLUMNS Addr1         VARCHAR2(200) PATH 'addressLine1',
             Addr2         VARCHAR2(200) PATH 'addressLine2',
             City          VARCHAR2(200) PATH 'city',
             State         VARCHAR2(200) PATH 'state',
             Zip           VARCHAR2(200) PATH 'zipCode',
             Contacts      XMLTYPE       PATH 'DriverContacts/DriverContact'
   ) a
    ON ( 1 = 1 )

   LEFT JOIN XMLTABLE
   (
     '/DriverContact' PASSING a.Contacts
     COLUMNS Fax           VARCHAR2(200) PATH 'faxNumber',
             Phone         VARCHAR2(200) PATH 'phoneNumber'
   ) s
    ON ( 1 = 1 )

  LEFT JOIN XMLTABLE
   (
     '/License' PASSING q.License
     COLUMNS licenseNumber VARCHAR2(200) PATH 'licenseNumber',
             licenseState  VARCHAR2(200) PATH 'licenseState/@code',
             licenseType   VARCHAR2(200) PATH 'licenseType/@code'
   ) u
   ON ( 1 = 1 );