2017-12-06 14 views
0

기본적으로 가짜 XML이 포함 된 CLOB 열이 있습니다. 보통 XML 문서와 같은 부모 자식 구조를 따르지 않기 때문에 가짜라고합니다.oracle 데이터베이스에서 특정 clob 데이터를 가져 오려고 시도합니다.

Heres는 내 CLOB의 샘플 :

<retryDetails> 
    <numberOfRetries>0</numberOfRetries> 
    <isToDoEntrySuppressed>false</isToDoEntrySuppressed> 
</retryDetails> 
    <interimStatus>D1DS</interimStatus> 
    <completionDetail> 
    <updateStatusDateTime>2017-07-06-15.24.14</updateStatusDateTime> 
    <completionEventDataArea>false</completionEventDataArea> 
    <servicePointCompletionDetails> 
    <servicePointDataDetails/> 
    </servicePointCompletionDetails> 
    <messageCompletionInformation/> 
    <installDataDetails/> 
    <ctCheck> 
    <currentTransformerDetails/> 
    </ctCheck> 
    <vtCheck> 
    <voltageTransformerDetails/> 
    </vtCheck> 
    <existingDevice> 
    <deviceCompletionDetails> 
    <deviceDataDetails/> 
    <readingCompletionDetails> 
    <readingDetails/> 
    </readingCompletionDetails> 
    </deviceCompletionDetails> 
    <itemCompletionDetails> 
    <itemDataDetails/> 
    </itemCompletionDetails> 
    <meterTestDataDetails/> 
    <meterDataDetails/> 
    </existingDevice> 
    <newDevice> 
    <deviceCompletionDetails> 
    <deviceDataDetails/> 
    <readingCompletionDetails> 
    <readingDetails/> 
    </readingCompletionDetails> 
    </deviceCompletionDetails> 
    <itemCompletionDetails> 
    <itemDataDetails/> 
    </itemCompletionDetails> 
    <meterDataDetails/> 
    <currentTransformerDetails/> 
    <voltageTransformerDetails/> 
    </newDevice> 
    <completionInformation> 
    <customerContactDetails/> 
    <remarkTypes/> 
    <grantExtensionDetails/> 
    <paymentDetails/> 
    </completionInformation> 
    </completionDetail> 
    <responseDetail> 
    <message> 
    <taskId>01327329221115</taskId> 
    <hostExternalId>01327329221115</hostExternalId> 
    <taskType>D1-ServiceInvestigation</taskType> 
    <completionDateTime>2017-07-06-15.24.14</completionDateTime> 
    <completedByCrew>Successfully Issued a work to CREW=E04393</completedByCrew> 
    <messageId>01327329221115</messageId> 
    <completionInformation> 
    <dispatchDateTime>2017-07-06-15.24.14</dispatchDateTime> 
    <customerContactDetails/> 
    <remarkTypes/> 
    </completionInformation> 
    <utilityCompletionInformation> 
    <servicePointCompletionDetails> 
    <servicePointDataDetails> 
    <servicePointId>741788842119</servicePointId> 
    </servicePointDataDetails> 
    </servicePointCompletionDetails> 
    <existingDevice> 
    <meterCompletionDetails> 
    <verificationDetails> 
    <response> 
    <readingDetails/> 
    </response> 
    </verificationDetails> 
    <meterDataDetails/> 
    <readingCompletionDetails> 
    <readingDetails/> 
    </readingCompletionDetails> 
    </meterCompletionDetails> 
    <itemCompletionDetails> 
    <verificationDetails> 
    <response> 
    <readingDetails/> 
    </response> 
    </verificationDetails> 
    <itemDataDetails/> 
    </itemCompletionDetails> 
    </existingDevice> 
    <newDevice> 
    <meterCompletionDetails> 
    <verificationDetails> 
    <response> 
    <readingDetails/> 
    </response> 
    </verificationDetails> 
    <meterDataDetails/> 
    <readingCompletionDetails> 
    <readingDetails/> 
    </readingCompletionDetails> 
    </meterCompletionDetails> 
    <itemCompletionDetails> 
    <verificationDetails> 
    <response> 
    <readingDetails/> 
    </response> 
    </verificationDetails> 
    <itemDataDetails/> 
    </itemCompletionDetails> 
    </newDevice> 
    </utilityCompletionInformation> 
    </message> 
    <fault/> 
    </responseDetail> 

내가, select 문에,이 데이터 혼란에 특정 노드를 꺼내하는 방법을 알아낼 할 일은 특히 "completedByCrew"필요 노드.

나는이 방법을 시도 -

SELECT XMLQUERY('/root/retryDetails/numberOfRetries/text()' 
     PASSING xmltype(to_clob('<root>') || 
         A.BO_DATA_AREA || 
         '</root>') RETURNING CONTENT) AS RESULT 
    FROM CISADM.D1_COMM_IN A 

을하지만 재시 노드의 수지나 갈 때, 정보가 반환 중지 그냥 널 간다. 어떤 아이디어?

+0

예제 clob을 전혀 사용할 수 없습니다. XML 구문 분석 오류가 발생합니다. "LPX-00245 : 문서 끝에 추가 데이터가 있습니다."http://sqlfiddle.com/#!4/34ecd/1 – kfinity

답변

0

예제를 사용할 수는 없지만 구문 분석을하기 전에 원본 요소를 루트 요소 (이 예제에서는 "root")에 넣으면 오라클의 XML 엔진이 훨씬 더 행복해집니다.

select XMLQUERY('/root/responseDetail/message/completedByCrew/text()' 
    PASSING xmltype(to_clob('<root>') || A.BO_DATA_AREA || '</root>') 
    RETURNING CONTENT) AS RESULT 
FROM CISADM.D1_COMM_IN A 
+0

오 촬영, 내가 빠진 내용입니다. 정말 고맙습니다! 미안, 나는 clobs에 처음이다 - 도와 주셔서 감사합니다! –

+0

괜찮습니다! 효과가 있다면 답변으로 표시하십시오. :) – kfinity