본문 바로가기

SQL

oracle xmltype

오라클의 XMLTYPE을 사용한 칼럼이 있는 테이블을 조회할 경우

그냥 조회를 하면 데이타 확인이 안된다.


이럴때는 아래와 같은 방법을 사용하자..

XMLTYPE이 있는 테이블명 : TB_XML
XMLTYPE의 칼럼명 : col_xml

SELECT XMLSERIALIZE(CONTENT col_xml as VARCHAR2(2000)) FROM TB_XML;

추가로 한가지 항목만을 가져오고 싶을 경우
예를 들어 col_xml 칼럼에 아래와 같은 xml문서가 들어있고, PNAME을 조회하고 싶을때

<PERSON>
<PNAME>FOTOG</PNAME>
<PHONE>011-111-1111</PHONE>
</PERSON>


SELECT extractValue(col_xml, '/PERSON/PNAME') FROM TB_XML;

! 단 extractValue를 뽑아낼때 컬럼이 xml type이 아닐 경우  XMLTYPE을 적어 준다.

SELECT extractValue( XMLTYPE(col_xml), '/PERSON/PNAME') FROM TB_XML;ex ) 

 <Data><CallNumber>TES</CallNumber><TwitterUrl>TEST</TwitterUrl><FacebookUrl>TEST</FacebookUrl><EnableRemoteSvc>Y</EnableRemoteSvc></Data>

     , EXTRACTVALUE(XMLTYPE(NVL(B.ADD_INF6, '<Data/>') ) , 'Data/CallNumber') AS callNo
     , EXTRACTVALUE(XMLTYPE(NVL(B.ADD_INF6, '<Data/>') ), 'Data/TwitterUrl') AS twitterUrl
     , EXTRACTVALUE(XMLTYPE(NVL(B.ADD_INF6, '<Data/>') ), 'Data/FacebookUrl') AS facebookUrl
     , EXTRACTVALUE(XMLTYPE(NVL(B.ADD_INF6, '<Data/>') ), 'Data/EnableRemoteSvc') AS remoteChk

출처 : http://fotog.tistory.com/406

-------------------------------------------------------------------------------------------------------

-- TEST

WITH TEST AS (SELECT '<Data>
                        <Good>
                        <CallNumber>TES</CallNumber>
                        <TwitterUrl>TEST</TwitterUrl>
                        <FacebookUrl>TEST</FacebookUrl>
                        <EnableRemoteSvc>Y</EnableRemoteSvc>
                        </Good>
                     </Data>' ADD_INF6 FROM DUAL)
SELECT EXTRACTVALUE(XMLTYPE(NVL(ADD_INF6, '<Data/>')), 'Data/Good/CallNumber') AS CALLNO
  FROM TEST

-- 결과 : TES