IT/ORACLE

Oracle XML함수

Qhtlr 2007. 5. 2. 14:42

SQL/XML 표준

Oracle9i Database에는 관계형 데이타를 쿼리하고 XML 문서를 반환할 수 있는 여러 표준 기반 함수들이 들어 있습니다. 이 함수들을 통칭하여 SQL/XML이라 하며 때때로 SQLX라고 불리기도 합니다. SQL/XML은 현재 ANSI/ISO SQL 표준의 일부(정확히 말해 Part 14)로 등장하고 있으며 올해 후반 ISO/IEC 표준으로 발표될 예정입니다. SQL/XML 표준은 업계의 폭 넓은 지원을 받고 있으며, SQL/XML 표준 정의 작업과 관련된 주요 데이타베이스 업체들로는 IBM, Microsoft, Oracle, Sybase 등이 있습니다.

SQL/XML 국제 표준 최종안(The Final Draft International Standard for SQL/XML)에서는 다음과 같은 요소들을 정의하고 있습니다.

  • XML: XML 데이타를 담는 데이타 유형
  • XMLAgg: GROUP BY 질의에서 XML 데이타를 그룹으로 분류 또는 집계하는 함수
  • XMLAttributes: SQL 질의에 의해 반환된 XML 요소에 특성을 설정하는 데 사용되는 함수
  • XMLConcat: 둘 이상의 XML 값을 연결하는 함수
  • XMLElement: 관계형 값을 XML 요소로 변형시키는 함수(형식: <elementName>value</elementName>)
  • XMLForest: 관계형 값 목록으로부터 XML 요소의 목록(일명: '포리스트(forest)')을 생성하는 함수
  • XMLNamespaces: XML 요소에서 네임스페이스를 선언하는 함수
  • XMLSerialize: XML 값을 문자열로 직렬화하는 함수

XMLAGG 함수
---------------------------------------------------------------------------
이 함수는 xmlelement에 의해서 XML 태그를 만든 문장을 모으는 기능이다.
【형식】
XMLAGG( XMLType_instance [order_by_clause])

【예제】
 SQL> select xmlagg(xmlelement("name",e.name)) from emp e;
XMLAGG(XMLELEMENT("NAME",E.NAME))
--------------------------------------------------------------------------
<name>Cho</name>
<name>Joe</name>
<name>kim</name>
<name>jijoe</name>

XMLCOLATTVAL 함수
--------------------------------------------------------------------------
이 함수는 XML fragment를 만드는 기능이다
【형식】
XMLCOLATTVAL( value_expr [AS c_alias],...)

【예제】
SQL> select xmlcolattval(e.name,e.id,e.salary) from emp e;

XMLCOLATTVAL(E.NAME,E.ID,E.SALARY)
--------------------------------------------------------------------------
<column name="NAME">Cho</column>
<column name="ID">1101</column>
<column name="S

<column name="NAME">Joe</column>
<column name="ID">1102</column>
<column name="S

<column name="NAME">kim</column>
<column name="ID">1103</column>
<column name="S

<column name="NAME">jijoe</column>
<column name="ID">1104</column>
<column name=

SQL> select * from emp;

        ID NAME           SALARY      BONUS
---------- ---------- ---------- ----------
      1101 Cho               250        125
      1102 Joe               240        100
      1103 kim               250        100
      1104 jijoe             220        100

XMLCONCAT 함수
---------------------------------------------------------------------------
XMLCONCAT( XMLType_instance,...) 함수는 XMLType instance를 series로 넣어 만드는 기능이다.
【예제】
SQL> select xmlconcat(
  2     xmlelement("name",e.name),xmlelement("bonus",e.bonus))
  3     from emp e;

XMLCONCAT(XMLELEMENT("NAME",E.NAME),XMLELEMENT("BONUS",E.BONUS))
----------------------------------------------------------------------------
<name>Cho</name>
<bonus>125</bonus>

<name>Joe</name>
<bonus>100</bonus>

<name>kim</name>
<bonus>100</bonus>

<name>jijoe</name>
<bonus>100</bonus>

XMLFOREST 함수
-----------------------------------------------------------------------------
이 함수는 각각의 argument parameter를  XML로 변환한다.
【형식】
XMLFOREST( value_expr [AS c_alias],...)

【예제】
SQL> select xmlelement("emp",
  2  xmlforest(e.id, e.name, e.bonus)) from emp e;

XMLELEMENT("EMP",XMLFOREST(E.ID,E.NAME,E.BONUS))
--------------------------------------------------------------------------
<emp>
  <ID>1101</ID>
  <NAME>Cho</NAME>
  <BONUS>125</BONUS>
</emp>

<emp>
  <ID>1102</ID>
  <NAME>Joe</NAME>
  <BONUS>100</BONUS>
</emp>

<emp>
  <ID>1103</ID>
  <NAME>kim</NAME>
  <BONUS>100</BONUS>
</emp>

<emp>
  <ID>1104</ID>
  <NAME>jijoe</NAME>
  <BONUS>100</BONUS>

</emp>

SQL> select * from emp;

        ID NAME           SALARY      BONUS
---------- ---------- ---------- ----------
      1101 Cho               250        125
      1102 Joe               240        100
      1103 kim               250        100
      1104 jijoe             220        100

XMLELEMENT 함수
---------------------------------------------------------------------------
이 함수는 XML 태그를 붙이는 기능이다
【예제】
SQL> select xmlelement("name",e.name) from emp e
  2  where name like 'j%';

XMLELEMENT("NAME",E.NAME)
--------------------------------------------------------------------------
<name>jijoe</name>