Oracle |使用SELECT查询提取具有多个子节点的XML
我在表中的clob列中有一个XML。下面给出了XML。 在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
<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 );