본문 바로가기
오라클 게시판/오라클 함수

【오라클(Oracle) SQL 함수】 XMLELEMENT 함수

by 기서무나구물 2021. 10. 25.

포스팅 목차

    XMLELEMENT (= XML + ELEMENT)

     


    문법

     

    XMLElement::=




    XML_attributes_clause::=


    목적

    XMLElement 함수는 XML 문서를 생성하기 위하여 식별자(identifier) 또는 EVALNAME value_expr 를 평가하여 XML 요소(Element) 이름으로 사용하고, 요소에 대한 선택적으로 지정하는 속성 모음 및 요소의 내용으로 구성되는 인수를 함께 사용한다. 조회 결과에 Tag 추가하여서 XML형태의 데이터를 생성한다. 

    이 함수는 XMLType 타입의 instance를 반환한다. XMLElement 함수는 SYS_XMLGen 함수와 유사하지만, 반환되는 XML에 속성을 포함할 수 있지만 XMLFormat 객체를 사용한 서식 지정은 허용하지 않는다.

    다음 세션의 예제처럼 XMLElement 함수는 일반적으로 중첩된 구조를 가진 XML 문서를 생성하기 위해 중첩하여 사용된다.

    ENTITYESCAPING 및 NONENTITYESCAPING 키워드에 대한 자세한 내용은 『Oracle XML DB Developer's Guide』를 참고

    둘러싸는 태그를 사용하려면 오라클 데이터베이스에 identifier에 대한 값을 지정해야 한다. 이 작업은 문자열 리터럴인 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에 별칭을 지정하는 경우,  c_alias 또는 평가된 값의 표현식(EVALNAME value_expr)은 초기화 매개변수 MAX_STRING_SIZE = STANDARD 로 설정된 경우에는 최대 4000자, MAX_STRING_SIZE = EXTENDED으로 설정된 경우에는 최대 32,767자까지 지정할 수 있다.

    다이어그램에서 XML_attributes_clause 절 뒤에 오는 선택적 value_expr의 경우:

    • value_expr 이 스칼라 표현식인 경우 AS 절을 생략할 수 있으며, Oracle은 열 이름을 요소 이름으로 사용한다.
    • 만약 value_expr 이 객체 타입(object type)이거나 집합(collection)인 경우, AS 절은 필수적이며 오라클은 지정된 c_alias를 둘러싸는 태그로 사용한다.
    • value_expr이 null인 경우, 해당 값 표현식에 대한 요소는 생성되지 않는다.

     


    관련 함수

    함수명 함수내용
    DEPTH UNDER_PAHT와 EQUALS_PAHT 조건과 함께 이용되는 보조 함수이다. 이 함수는 같은 상관 변수를 가지는 UNDER_PATH조건에 의해 지정된 PATH에서 레벨의 수를 반환한다.
    EXISTSNODE XPath에서 node의 존재 여부를 확인하여 그 결과를 반환한다.
    EXTRACT (XML)  VARCHAR2 XPath 문자열에서  XML 플래그먼트(fragment)를 포함한 XMLType 인스턴스를 반환한다.
    EXTRACTVALUE existsnode 함수와 유사한 함수로써 결과 node의 스칼라 값을 반환한다.
    PATH under_path나 equals_path의 보조 함수로서, 자원의 관계 경로를 반환한다.
    SYS_DBURIGEN 하나 이상의 열 또는 속성 및 선택적으로 ROWID를 인수로 지정하여서, 특정 열 또는 행 오브젝트에 대한 DBURIType 데이터 타입의 URL을 생성한다.
    SYS_XMLAGG 입력받은 모든 문서를 취합하여서 하나의 XML 문서를 통합한다.
    SYS_XMLGEN 스칼라 값, object type, xml type 인스턴스를 XML 문서로 변형한다.
    XMLAGG XML fragment(조각)의 집합체를 인수로 지정한 후 이 결과를 하나로 취합하여 XML 문서를 생성하여 반환한다.
    XMLCOLATTVAL 파라미터로 지정한 변수들을 "column name" 속성으로 구성된 XML 조각(XML fragment)으로 변환하고, 이 결과를 취합한 XML 문서를 생성한다.
    XMLCONCAT  둘 이상의 XML 값을 연결하는 함수.
    XMLELEMENT XML 문서를 생성하기 위하여 identifier에 대한 요소의 이름(element name), 요소에 대한 속성의 옵션 집합, 요소의 내용으로 구성된 인수를 지정한다.
    XMLFOREST 개별 인수의 파라미터를 XML로 변환하고, 변환된 인수를 결합한 XML 조각(XML 단편, XML fragment)을 반환한다.
    XMLSEQUENCE - XMLType 인스턴트를 지정하여서 XMLType에 있는 top-level 노드의 varray를 반환한다. 
    - XMLFormat 오브젝트의 옵션 인스턴스를 가지는 REFCURSOR 인스턴스를 지정하여서 커서의 각 행에 대하여 XMLSequence 형태로써 XML 문서를 반환한다.
    XMLTRANSFORM XMLType인스턴스와 그 자체가 XMLType 인스턴스인 XSL스타일 시트를 인수로 지정한다. 이 함수는 스타일 슈트를 인스턴스로 적용하여서 XMLType를 반환한다.

    [오라클 SQL 함수(Oracle SQL Function) 목록 리스트 링크]


    예제


    다음 예제에서는 일련의 직원에 대하여 직원의 이름과 입사 일자를 제공하는 중첩된 요소로 구성된 Emp 요소를 생성한다:

    Oracle Programming
    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;

     

    Results
    Result
    -------------------------------------------------------------------
    <Emp>
      <Name>MK_MAN Hartstein</Name>
      <Hiredate>17-FEB-96</Hiredate>
    </Emp>
    
    <Emp>
      <Name>MK_REP Fay</Name>
      <Hiredate>17-AUG-97</Hiredate>
    </Emp>
    
    <Emp>
      <Name>HR_REP Mavris</Name>
      <Hiredate>07-JUN-94</Hiredate>
    </Emp>
    
    <Emp>
      <Name>PR_REP Baer</Name>
      <Hiredate>07-JUN-94</Hiredate>
    </Emp>
    
    <Emp>
      <Name>AC_MGR Higgins</Name>
      <Hiredate>07-JUN-94</Hiredate>
    </Emp>
    
    <Emp>
      <Name>AC_ACCOUNT Gietz</Name>
      <Hiredate>07-JUN-94</Hiredate>
    </Emp>
    
    6 rows selected.

     


    다음 유사한 예제에서는 XML_attributes_clause 절과 함께 XMLElement 함수를 사용하여 최상위 요소의 속성 값을 포함하는 중첩된 XML 요소를 생성한다:

    Oracle Programming
    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;

     

    Results
    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 절 내의 서브 쿼리를 사용하여 다른 테이블에서 요소의 속성에 대한 정보를 검색한다:

    Oracle Programming
    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;

     

    Results
    Emp Element
    -------------------------------------------------------------------
    <Emp EMPLOYEE_ID="205" LAST_NAME="Higgins">
      <Dept DEPARTMENT_ID="110" Dept_name="Accounting"/>
      <salary>12000</salary>
      <Hiredate>07-JUN-94</Hiredate>
    </Emp>

    이 두개의 함수의 출력을 비교하기 위하여 XMLFOREST 함수를 참조.

     


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

    오라클 SQL 함수(Oracle SQL Function) 목록 리스트 링크

     

    [SQL, Pandas, R Prog, Dplyr, SQLDF, PANDASQL, DATA.TABLE]
    SQL EMP 예제로 만나는 테이블 데이터 처리 방법 리스트 링크

    2024.01 수정

    반응형

    댓글