본문 바로가기

[오라클 레퍼런스 함수] XMLELEMENT - XML 엘리먼트를 생성하고 XMLType 인스턴스를 반환

by ㅇㅍㅍ 2023. 9. 5.
[오라클 레퍼런스 함수] XMLELEMENT - XML 엘리먼트를 생성하고 XMLType 인스턴스를 반환
728x90

 

XMLELEMENT

 

구문

XMLELEMENT ( [ ENTITYESCAPING | NOENTITYESCAPING ]
   { ( [ NAME ] identifier ) | ( EVALNAME value_expr ) }
   [ , XML_attributes_clause ]
   [ , value_expr [ [ AS ] c_alias ]]...

 

XML_attributes_clause::=
XMLATTRIBUTES
  ( [ ENTITYESCAPING | NOENTITYESCAPING ]
    [ SCHEMACHECK | NOSCHEMACHECK ]
    value_expr [ { [AS] c_alias } | { AS EVALNAME value_expr } ]
      [, value_expr [ { [AS] c_alias } | { AS EVALNAME value_expr } ] ]...
  )

 

목적

XMLElement 함수는 identifier 또는 EVALNAME value_expr을 평가하여 요소 이름을 사용하고, 요소에 대한 선택적 속성 컬렉션 및 요소 내용을 구성하는 인수를 사용합니다. 이 함수는 XMLType 유형의 인스턴스를 반환합니다. XMLElementSYS_XMLGen과 유사하지만 XMLElement는 반환되는 XML에 속성을 포함할 수 있지만 XMLFormat 객체를 사용한 형식 지정은 허용하지 않습니다.

XMLElement 함수는 일반적으로 중첩하여 사용되어 중첩된 구조를 가진 XML 문서를 생성합니다. 아래 섹션의 예제와 같이 사용됩니다.

ENTITYESCAPINGNONENTITYESCAPING 키워드에 대한 설명은 Oracle XML DB Developer's Guide를 참조하십시오.

Oracle Database가 둘러싸는 태그를 사용하도록 하려면 식별자를 지정해야 합니다. 이것은 문자열 리터럴 인 identifier 또는 EVALNAME value_expr을 지정하여 수행할 수 있으며, 후자의 경우 값 표현식이 평가되고 결과인 문자열 리터럴을 식별자로 사용합니다. 식별자는 반드시 열 이름이나 열 참조일 필요는 없으며, 표현식 또는 null일 수 없습니다. MAX_STRING_SIZE = STANDARD로 초기화 매개변수를 설정한 경우 최대 4000자, MAX_STRING_SIZE = EXTENDED로 설정한 경우 최대 32767자까지 될 수 있습니다.

요소 내용을 구성하는 객체는 XMLATTRIBUTES 키워드 뒤에 따릅니다. XML_attributes_clause에서 value_expr이 null이면 해당 값 표현식에 대한 속성이 생성되지 않습니다. value_expr의 유형은 객체 유형이나 컬렉션일 수 없습니다. AS 절을 사용하여 value_expr에 대한 별칭을 지정하는 경우 초기화 매개변수 MAX_STRING_SIZE = STANDARD로 설정된 경우 c_alias 또는 평가된 값 표현식 (EVALNAME value_expr)은 최대 4000자, MAX_STRING_SIZE = EXTENDED로 설정된 경우 최대 32767자까지 될 수 있습니다.

 

참고:

MAX_STRING_SIZE에 대한 자세한 내용은 "Extended Data Types"을 참조하십시오.

 

도표에서 XML_attributes_clause 다음에 오는 선택적인 value_expr에 대한 경우:

  • value_expr이 스칼라 식이면 AS 절을 생략할 수 있으며 Oracle은 열 이름을 요소 이름으로 사용합니다.
  • value_expr이 객체 유형이거나 컬렉션인 경우 AS 절이 필수이며 Oracle은 지정된 c_alias를 둘러싸는 태그로 사용합니다.
  • value_expr이 null이면 해당 값 표현식에 대한 요소가 생성되지 않습니다.

    참고:
    SYS_XMLGEN

 

예제

다음 예제는 일련의 직원에 대한 Emp 요소를 생성하며, 직원의 이름과 입사일을 제공하는 중첩된 요소를 포함합니다:

SELECT XMLELEMENT("Emp", XMLELEMENT("Name", 
   e.job_id||' '||e.last_name),
   XMLELEMENT("Hiredate", e.hire_date)) as "Result"
   FROM employees e WHERE employee_id > 200;

Result
-------------------------------------------------------------------
<Emp>
  <Name>MK_MAN Hartstein</Name>
  <Hiredate>2004-02-17</Hiredate>
</Emp>
 
<Emp>
  <Name>MK_REP Fay</Name>
  <Hiredate>2005-08-17</Hiredate>
</Emp>
 
<Emp>
  <Name>HR_REP Mavris</Name>
  <Hiredate>2002-06-07</Hiredate>
</Emp>
 
<Emp>
  <Name>PR_REP Baer</Name>
  <Hiredate>2002-06-07</Hiredate>
</Emp>
 
<Emp>
  <Name>AC_MGR Higgins</Name>
  <Hiredate>2002-06-07</Hiredate>
</Emp>
 
<Emp>
  <Name>AC_ACCOUNT Gietz</Name>
  <Hiredate>2002-06-07</Hiredate>
</Emp>

6 rows selected.

 

다음 유사한 예제는 XML_attributes_clause를 사용하여 최상위 요소에 속성 값이 있는 중첩 XML 요소를 생성하는 XMLElement 함수를 사용합니다:

SELECT XMLELEMENT("Emp",
      XMLATTRIBUTES(e.employee_id AS "ID", e.last_name),
      XMLELEMENT("Dept", e.department_id),
      XMLELEMENT("Salary", e.salary)) AS "Emp Element"
   FROM employees e
   WHERE e.employee_id = 206;

Emp Element
---------------------------------------------------------------
<Emp ID="206" LAST_NAME="Gietz">
  <Dept>110</Dept>
  <Salary>8300</Salary>
</Emp>

 

마지막 예제에서는 last_name 열에 대한 AS identifier 절이 지정되지 않았음을 주목하십시오. 결과적으로 반환된 XML은 기본값으로 열 이름 last_name을 사용합니다.

마지막으로, 다음 예제는 XML_attributes_clause 내에서 다른 테이블에서 정보를 검색하기 위해 하위 쿼리를 사용하여 요소의 속성으로 가져옵니다:

SELECT XMLELEMENT("Emp", XMLATTRIBUTES(e.employee_id, e.last_name),
   XMLELEMENT("Dept", XMLATTRIBUTES(e.department_id,
   (SELECT d.department_name FROM departments d
   WHERE d.department_id = e.department_id) as "Dept_name")),
   XMLELEMENT("salary", e.salary),
   XMLELEMENT("Hiredate", e.hire_date)) AS "Emp Element"
   FROM employees e
   WHERE employee_id = 205;

Emp Element
-------------------------------------------------------------------
<Emp EMPLOYEE_ID="205" LAST_NAME="Higgins">
  <Dept DEPARTMENT_ID="110" Dept_name="Accounting"/>
  <salary>12008</salary>
  <Hiredate>2002-06-07</Hiredate>
</Emp>

 


출처: 오라클 레퍼런스

원문 링크: Oracle XMLELEMENT 함수 문서

 

반응형

댓글