2016-10-27 3 views
0

다음과 같이 select 쿼리를 수행하려고합니다. 여기서 xmltype으로 작은 xml을 전달합니다.xmltable에 대한 SELECT 쿼리

SELECT x.PO_STEP,x.INSTL_ID,X.INSTL_LOC_CODE from xmltable 
(
    XMLNAMESPACES('namespace1' as "v20", 'namespace2' as "v201"), 
'/v20:ProductionOrder/v201:ProductionOrderSteps/v201:ProductionOrderStep/v201:POStepDetails/v201:InstallationDetails/*[text()]' 
PASSING xmltype(' <v20:ProductionOrder xmlns="***something***" xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v20="namespace1"> 

     <v201:ProductionOrderSteps xmlns:v201="namespace2"> 
      <v201:ProductionOrderStep> 
      <v201:POStepDetails> 
       <v201:PO_STEP>1L</v201:PO_STEP> 
       <v201:InstallationDetails> 
       <v201:INSTL_ID>032</v201:INSTL_ID> 
       <v201:INSTL_LOC_CODE>N</v201:INSTL_LOC_CODE> 
       </v201:InstallationDetails> 
       <v201:InstallationDetails> 
       <v201:INSTL_ID>000</v201:INSTL_ID> 
       <v201:INSTL_LOC_CODE /> 
       </v201:InstallationDetails> 
       <v201:InstallationDetails> 
       <v201:INSTL_ID>000</v201:INSTL_ID> 
       <v201:INSTL_LOC_CODE /> 
       </v201:InstallationDetails> 
       <v201:InstallationDetails> 
       <v201:INSTL_ID>000</v201:INSTL_ID> 
       <v201:INSTL_LOC_CODE /> 
       </v201:InstallationDetails> 
      </v201:POStepDetails> 
      </v201:ProductionOrderStep> 
      <v201:ProductionOrderStep> 
      <v201:POStepDetails> 
       <v201:PO_STEP>1B</v201:PO_STEP> 
       <v201:InstallationDetails> 
       <v201:INSTL_ID>001</v201:INSTL_ID> 
       <v201:INSTL_LOC_CODE>N</v201:INSTL_LOC_CODE> 
       </v201:InstallationDetails> 
       <v201:InstallationDetails> 
       <v201:INSTL_ID>000</v201:INSTL_ID> 
       <v201:INSTL_LOC_CODE /> 
       </v201:InstallationDetails> 
       <v201:InstallationDetails> 
       <v201:INSTL_ID>000</v201:INSTL_ID> 
       <v201:INSTL_LOC_CODE /> 
       </v201:InstallationDetails> 
      </v201:POStepDetails> 
      </v201:ProductionOrderStep> 
     </v201:ProductionOrderSteps> 
     </v20:ProductionOrder>') 

COLUMNS 
PO_STEP VARCHAR2(20) PATH './parent::*/parent::*/v201:PO_STEP', 
INSTL_ID VARCHAR2(30) PATH '//v201:INSTL_ID', 
INSTL_LOC_CODE VARCHAR2(30) PATH '//v201:INSTL_LOC_CODE' 
)x 

그러나 나는 내가 XPath는이 컬럼과 함께 잘못 전달되는 또는 XPath는 상단에 기록 여부는 XPath에 어떤 문제가 있는지 이해 할 수없는 나는 다음과 같은 결과

PO_STEP  INSTL_ID INSTL_LOC_CODE 
     1L  null  null 
     1L  null  null 
     1L  null  null 
     1L  null  null 
     1L  null  null 
     1B  null  null 
     1B  null  null 
     1B  null  null 
     1B  null  null 

무엇입니까 잘못된 것입니다. 나는 오라클 SQL 개발자에게

답변

0

변경 XPath를 사용하고

/v20:ProductionOrder/v201:ProductionOrderSteps/v201:ProductionOrderStep/v201:POStepDetails/v201:InstallationDetails/*[text()]

/v20:ProductionOrder/v201:ProductionOrderSteps/v201:ProductionOrderStep/v201:POStepDetails/v201:InstallationDetails

에 첫 번째 항목이 같은 말에 [1]를 추가 활용하려면 다음

/v20:ProductionOrder/v201:ProductionOrderSteps/v201:ProductionOrderStep/v201:POStepDetails/v201:InstallationDetails[1]

변경

./parent::*/parent::*/v201:PO_STEP

./parent::*/v201:PO_STEP

에 대한 결과는 다음과 같습니다

1L 032 N 
1L 000 
1L 000 
1L 000 
1B 001 N 
1B 000 
1B 000 

첫 번째 경우에만 결과는 다음과 같습니다.

1L 032 N 
1B 001 N 
+0

감사합니다. 그리고 난 그냥 각의 첫 번째 occurance 볼 필요가있는 경우 어떤 , 즉, 출력이 내가하는 방법에 대한 답을 편집 1L 032 N (1B) 001 N – ArpanMona

+0

다음과 같이해야합니다에만 첫 번째 발생. – SomeDude

+0

감사합니다. – ArpanMona