2016-06-20 4 views
0

CLOB 컬럼에 저장된 데이터를 추출하는 데 도움이 필요합니다. CLOB 데이터를 구조화 된 열과 행으로 변환하고 싶습니다.CLOB로 저장된 XML에서 데이터를 추출하십시오.

CLOB 열 데이터 : 나는 여러 쿼리를 실행 시도했지만 원하는 결과를 달성 할 수 없습니다

CODE  VALUE (curVal) 
---------- -------------- 
ADV   N 
ASEN1  N 
COGN  Y 
COMORBID 1 

로 데이터를보고 싶다

<questions version="1"> 
<fld code="ADV" vis="Y"><oriVal></oriVal><curVal>N</curVal></fld> 
<fld code="ASEN1" vis="Y"><oriVal></oriVal><curVal>N</curVal></fld> 
<fld code="COGN" vis="Y"><oriVal></oriVal><curVal>A</curVal></fld> 
<fld code="`enter code here`COM" vis="Y"><oriVal></oriVal></fld> 
<fld code="COMORBID" vis="Y"><oriVal></oriVal><curVal>1</curVal></fld> 
<fld code="DIET" vis="Y"><oriVal></oriVal><curVal>R</curVal></fld> 
<fld code="DIS" vis="Y"><oriVal></oriVal></fld> 
<fld code="DISC" vis="Y"><oriVal></oriVal><curVal></curVal></fld> 
<fld code="DISC1" vis="Y"><oriVal></oriVal><curVal></curVal></fld> 
<fld code="DISC2" vis="Y"><oriVal></oriVal><curVal></curVal></fld> 
<fld code="DNR" vis="Y"><oriVal></oriVal><curVal>N</curVal></fld> 
<fld code="ER" vis="Y"><oriVal></oriVal><curVal>1</curVal></fld> 
</questions>  

.

SELECT EXTRACTVALUE(xmltype(QUESTIONXML), '/questions/fld/oriVal/curVal[@code="ADV"]') 
FROM pac_copy.questionnaire; 

SELECT EXTRACTVALUE(QUESTIONXML, '/questions/fld') FROM pac_copy.questionnaire; 

SELECT XMLTYPE(u.QUESTIONXML).EXTRACT('/questions/fld/text()') as SORTCODE 
FROM pac_copy.questionnaire u; 

답변

0

이에 대한 XMLTable()를 사용할 수 있습니다

select x.code, x.curval 
from questionnaire q 
cross join xmltable('/questions/fld' 
    passing xmltype(q.questionxml) 
    columns code varchar2(10) path '@code', 
    curval varchar2(10) path '/curVal' 
) x; 

CODE  CURVAL 
---------- ---------- 
ADV  N   
ASEN1  N   
COGN  A   
COM     
COMORBID 1   
DIET  R   
DIS     
DISC     
DISC1     
DISC2     
DNR  N   
ER   1   

당신이 또는 만 값이 설정으로, 특정 코드로 제한하려는 경우 당신은 필터링 할 수 있습니다; 문자열 값을 제공하는 CTE와 함께 :

with questionnaire (questionxml) as (
    select '<questions version="1"> 
<fld code="ADV" vis="Y"><oriVal></oriVal><curVal>N</curVal></fld> 
<fld code="ASEN1" vis="Y"><oriVal></oriVal><curVal>N</curVal></fld> 
<fld code="COGN" vis="Y"><oriVal></oriVal><curVal>A</curVal></fld> 
<fld code="COM" vis="Y"><oriVal></oriVal></fld> 
<fld code="COMORBID" vis="Y"><oriVal></oriVal><curVal>1</curVal></fld> 
<fld code="DIET" vis="Y"><oriVal></oriVal><curVal>R</curVal></fld> 
<fld code="DIS" vis="Y"><oriVal></oriVal></fld> 
<fld code="DISC" vis="Y"><oriVal></oriVal><curVal></curVal></fld> 
<fld code="DISC1" vis="Y"><oriVal></oriVal><curVal></curVal></fld> 
<fld code="DISC2" vis="Y"><oriVal></oriVal><curVal></curVal></fld> 
<fld code="DNR" vis="Y"><oriVal></oriVal><curVal>N</curVal></fld> 
<fld code="ER" vis="Y"><oriVal></oriVal><curVal>1</curVal></fld> 
</questions>' from dual 
) 
select x.code, x.curval 
from questionnaire q 
cross join xmltable('/questions/fld' 
    passing xmltype(q.questionxml) 
    columns code varchar2(10) path '@code', 
    curval varchar2(10) path '/curVal' 
) x 
where x.curval is not null; 

CODE  CURVAL 
---------- ---------- 
ADV  N   
ASEN1  N   
COGN  A   
COMORBID 1   
DIET  R   
DNR  N   
ER   1   

Read more about using XQuery with XML data

+0

모든 도움을 주셔서 감사합니다. alex, 나는이 쿼리를 일찍 시도했는데 xmltype 함수가 누락되었습니다. –