2013-08-03 2 views
2

나는 oracle에서 XML을 처음 접했고, 나는 매우 간단한 요구 사항을 가지고있다.oracle에서 xmltype의 데이터 포맷하기

나는 XMLTYPE 데이터를 으로 반환하는 함수를 가지고 있습니다.

<ROWSET> 
<ROW> 
    <RCODE>FIRST CHECK DATA</RCODE> 
</ROW> 
<ROW> 
    <RCODE>SECOND CHECK DATA</RCODE> 
</ROW> 
<ROW> 
    <RCODE>THIRD CHECK DATA</RCODE> 
</ROW> 
</ROWSET> 

정상적인 방법으로 모든 태그를 피하고 데이터를 표시하고 싶습니다. 나는

내가 라인 피드를 제공하거나 행 사이에 공백을 추가 할 수있는 방법
FIRST CHECK DATA 

SECOND CHECK DATA 

THIRD CHECK DATA 

와 동일하게 표시 할

DECLARE 
l_xmltype XMLTYPE; 
l_var VARCHAR2(1000); 

BEGIN 
l_xmltype := getdata(849,20130804);     

l_var := l_xmltype.extract('*/ROW/RCODE/text()').getstringval(); 
END; 

OUTPUT: 

FIRST CHECK DATASECOND CHECK DATAJOHNSON KOUL 

으로 노력했다.

데이터를 테이블에 저장하지 않겠습니다.

답변

3

접근 방법 중 하나는 최상위 노드 모음을 반환하는 XMLSequence() 함수를 사용할 수 있으며 extractvalue()을 적용하여 실제 노드 값을 얻습니다.

SQL> create or replace function GetXML return xmltype 
    2 is 
    3 begin 
    4 return xmltype('<ROWSET> 
    5      <ROW> 
    6      <RCODE>FIRST CHECK DATA</RCODE> 
    7      </ROW> 
    8      <ROW> 
    9      <RCODE>SECOND CHECK DATA</RCODE> 
10      </ROW> 
11      <ROW> 
12      <RCODE>THIRD CHECK DATA</RCODE> 
13      </ROW> 
14     </ROWSET>'); 
15 end; 
16/

Function created 
    : 여기

    데이터 XMLType 데이터 형식의 반환하는 간단한 함수입니다 : 다른 접근 방식, 그리고합니다 ( XMLSequence()가 사용되지 않습니다 오라클 11gr2의 등) 바람직 하나로서, 당신은 XMLTable() 기능을 사용할 수 있습니다

    01 : XMLSequence()

    select extractvalue(column_value, '/RCODE') as rcode 
        from table(
          xmlsequence(
             extract(getxml, '/ROWSET/ROW/RCODE') 
             ) 
          ) 
    

    결과를 사용

  1. 사용 23,516,

    RCODE 
    -------------------- 
    FIRST CHECK DATA 
    SECOND CHECK DATA 
    THIRD CHECK DATA 
    
  2. XMLTable()

    select Rcode 
        from xmltable('/ROWSET/ROW/RCODE' 
            passing getxml columns Rcode varchar2(21) path '/RCODE') 
    

    결과 :

    RCODE 
    --------------------- 
    FIRST CHECK DATA 
    SECOND CHECK DATA 
    THIRD CHECK DATA