2016-06-08 2 views
0

테이블의 clob 열에 XML이 있습니다. 아래에 XML이 나와 있습니다. SELECT 쿼리에서 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> 

나는

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

과 노력하지만 내가 알아 낸

+1

질문 할 출력을 추가 할 수 있습니까? 그리고 쿼리가 작동하지 않는 이유 - 오류가 있거나 잘못된 결과를 얻는 경우? –

+0

xml에 code = ""인 예제를 표시하지 않습니다. – OldProgrammer

답변

0

나는 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);