2016-06-08 74 views
0

我在表中的clob列中有一個XML。 XML在下面給出。 在SELECT查詢中,我需要在xml中提取值。請幫忙。Oracle |使用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> 

我試着用

SELECT XMLTYPE(u.xmlcollumn).EXTRACT('/Driver/firstName/text()').getStringVal() from xmltable u; 

但我不能夠得到的子節點,並與代碼元素=」「

感謝, PK

+1

您可以添加您期望的問題的輸出嗎?以及爲什麼你的查詢不起作用 - 如果它錯誤,或得到錯誤的結果? –

+0

你不會在你的xml中顯示任何代碼=「」 – OldProgrammer

回答

0

我想通了我。這可能對其他有類似要求的人有幫助。

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); 
相關問題