포스팅 목차
o 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 수정
'오라클 게시판 > 오라클 함수' 카테고리의 다른 글
【오라클(Oracle) SQL 함수】 XMLSEQUENCE 함수 (0) | 2021.10.25 |
---|---|
【오라클(Oracle) SQL 함수】 XMLFOREST 함수 (0) | 2021.10.25 |
【오라클(Oracle) SQL 함수】 XMLCOLATTVAL 함수 (0) | 2021.10.24 |
【오라클(Oracle) SQL 함수】 XMLAGG 함수 (0) | 2021.10.24 |
【오라클(Oracle) SQL 함수】 WIDTH_BUCKET 함수 (0) | 2021.10.24 |
댓글