내용 목차
본 장에서는 DBMS_XMLGEN 패키지의 기본 개념과 패키지 내의 프러시저와 함수를 사용하는 방법을 설명한다.
DBMS_XMLGEN은 쿼리를 입력으로 받고 해당 쿼리의 결과 집합을 XML 문서로 생성해주는 패키지이다.
다음은 DBMS_XMLGEN 패키지 내에 정의된 상수이다.
Conversion Flag
프로토타입
ENTITY_ENCODE CONSTANT NUMBER := 0; ENTITY_DECODE CONSTANT NUMBER := 1;
인자
DBMS_XMLGEN.CONVERT 함수의 인자로 사용하는 flag에 대한 설명이다.
인자 | 설명 |
---|---|
ENTITY_ENCODE | 데이터를 인코딩하여 결과를 출력한다. |
ENTITY_DECODE | 데이터를 디코딩하여 결과를 출력한다. |
Null Handling Flag
프로토타입
DROP_NULLS CONSTANT NUMBER := 0; NULL_ATTR CONSTANT NUMBER := 1; EMPTY_TAG CONSTANT NUMBER := 2;
인자
DBMS_XMLGEN.SETNULLHANDLING 프러시저의 인자로 사용하는 flag에 대한 설명이다.
인자 | 설명 |
---|---|
DROP_NULLS | NULL 값을 출력하지 않는다. |
NULL_ATTR | NULL ATTRIBUTE로 출력한다. |
EMPTY_TAG | EMPTY ELEMENT로 출력한다. |
본 절에서는 DBMS_XMLGEN 패키지에서 제공하는 별도 정의된 타입을 설명한다.
본 절에서는 DBMS_XMLGEN 패키지에서 제공하는 프러시저와 함수를 알파벳 순으로 설명한다.
컨텍스트 핸들로부터 컨텍스트를 종료한다.
CLOSECONTEXT 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_XMLGEN.CLOSECONTEXT ( ctx IN ctxHandle );
파라미터
파라미터 | 설명 |
---|---|
ctx | CLOSECONTEXT에 의해 닫힐 컨텍스트 핸들이다. |
예제
DECLARE ctx ctxHandle; BEGIN ctx := DBMS_XMLGEN.NEWCONTEXT('select 1 from dual'); DBMS_XMLGEN.CLOSECONTEXT(ctx); END; /
XML 데이터를 escaped 또는 unescaped XML 데이터로 변환하는 함수이다.
CLOB 타입을 입력으로 받으면 CLOB 타입을, VARCHAR 타입을 입력으로 받으면 VARCHR 타입을 반환한다.
프로토타입
CLOB인 경우
DBMS_XMLGEN.CONVERT ( xmlData IN CLOB, flag IN NUMBER := ENTITY_ENCODE ) RETURN CLOB;
VARCHR인 경우
DBMS_XMLGEN.CONVERT ( xmlData IN VARCHAR2, flag IN NUMBER := ENTITY_ENCODE ) RETURN VARCHAR2;
파라미터
파라미터 | 설명 |
---|---|
xmlData | CLOB이나 VARCHAR 타입의 인코딩이나 디코딩할 데이터이다. |
flag | 인코딩인지 디코딩인지 여부를 결정하는 flag 값이다.
|
예제
DECLARE escape_str VARCHAR2; BEGIN escape_str := DBMS_XMLGEN.CONVERT('Hi escaped_str! < & >', DBMS_XMLGEN.ENTITY_ENCODE); DBMS_OUTPUT.PUT_LINE(escape_str); END; /
GETXML 또는 GETXMLTYPE에 의해 처리된 로우의 수를 출력한다.
GETNUMROWSPROCESSED 함수의 세부 내용은 다음과 같다.
프로토타입
DBMS_XMLGEN.GETNUMROWSPROCESSED ( ctx IN ctxHandle ) RETURN NUMBER;
파라미터
파라미터 | 설명 |
---|---|
ctx | NEWCONTEXT 함수 호출에 의해 생성되는 컨텍스트 핸들이다. |
예제
CREATE TABLE EMP_T (EMP_ID NUMBER, EMP_NAME VARCHAR2(16)); INSERT INTO EMP_T VALUES(2015001, 'TOM'); INSERT INTO EMP_T VALUES(2015002, 'DAVID'); INSERT INTO EMP_T VALUES(2015003, 'GEORGE'); DECLARE ctx ctxHandle; result CLOB; BEGIN ctx := DBMS_XMLGEN.NEWCONTEXT('select * from EMP_T'); result := DBMS_XMLGEN.GETXML(ctx); DBMS_OUTPUT.PUT_LINE(DBMS_XMLGEN.GETNUMROWSPROCESSED(ctx)); DBMS_XMLGEN.CLOSECONTEXT(ctx); END; /
주어진 ctxHandle로부터 CLOB 형태의 XML 문서를 생성한다.
프로토타입
DBMS_XMLGEN.GETXML ( ctx IN ctxHandle, dtdOrSchema IN NUMBER ) RETURN CLOB;
파라미터
파라미터 | 설명 |
---|---|
ctx | NEWCONTEXT 함수 호출에 의해 생성되는 컨텍스트 핸들이다. |
dtdOrSchema | DTD 또는 Schema의 출력 여부를 결정하는 값이다. NONE 설정만 지원 가능하다. |
예제
CREATE TABLE EMP_T (EMP_ID NUMBER, EMP_NAME VARCHAR2(16)); INSERT INTO EMP_T VALUES(2015001, 'TOM'); INSERT INTO EMP_T VALUES(2015002, 'DAVID'); INSERT INTO EMP_T VALUES(2015003, 'GEORGE'); DECLARE ctx ctxHandle; result CLOB; BEGIN ctx := DBMS_XMLGEN.NEWCONTEXT('select * from EMP_T'); result := DBMS_XMLGEN.GETXML(ctx); DBMS_OUTPUT.PUT_LINE(result); DBMS_XMLGEN.CLOSECONTEXT(ctx); END; /
주어진 ctxHandle로부터 XMLType 형태의 XML 문서를 생성한다.
프로토타입
DBMS_XMLGEN.GETXMLTYPE ( ctx IN ctxHandle, dtdOrSchema IN NUMBER ) RETURN XMLType;
파라미터
파라미터 | 설명 |
---|---|
ctx | NEWCONTEXT 함수 호출에 의해 생성되는 컨텍스트 핸들이다. |
dtdOrSchema | DTD 또는 Schema의 출력 여부를 결정하는 값이다. NONE 설정만 지원 가능하다. |
예제
CREATE TABLE EMP_T (EMP_ID NUMBER, EMP_NAME VARCHAR2(16)); INSERT INTO EMP_T VALUES(2015001, 'TOM'); INSERT INTO EMP_T VALUES(2015002, 'DAVID'); INSERT INTO EMP_T VALUES(2015003, 'GEORGE'); DECLARE ctx ctxHandle; result XMLType; BEGIN ctx := DBMS_XMLGEN.NEWCONTEXT('select * from EMP_T'); result := DBMS_XMLGEN.GETXMLTYPE(ctx); DBMS_OUTPUT.PUT_LINE(result); DBMS_XMLGEN.CLOSECONTEXT(ctx); END; /
쿼리문으로부터 컨텍스트 핸들을 생성한다. 컨텍스트 핸들은 GETXML 함수에서 XML 문서를 얻기 위해 사용된다.
프로토타입
DBMS_XMLGEN.NEWCONTEXT ( query IN VARCHAR2 ) RETURN ctxHandle;
DBMS_XMLGEN.NEWCONTEXT ( query IN SYS_REFCURSOR ) RETURN ctxHandle;
파라미터
파라미터 | 설명 |
---|---|
query | XML 문서로 변경될 데이터를 출력하는 쿼리문 또는 커서다. |
예제
DECLARE ctx ctxHandle; BEGIN ctx := DBMS_XMLGEN.NEWCONTEXT('select 1 from dual'); DBMS_XMLGEN.CLOSECONTEXT(ctx); END; /
GETXML 또는 GETXMLType에서 처리할 최대 로우의 수를 설정한다.
SETMAXROWS 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_XMLGEN.SETMAXROWS ( ctx IN ctxHandle, maxRows IN NUMBER );
파라미터
파라미터 | 설명 |
---|---|
ctx | 실행한 쿼리의 컨텍스트 핸들이다. |
maxRows | 처리할 최대 로우의 수이다. |
예제
CREATE TABLE EMP_T (EMP_ID NUMBER, EMP_NAME VARCHAR2(16)); INSERT INTO EMP_T VALUES(2015001, 'TOM'); INSERT INTO EMP_T VALUES(2015002, 'DAVID'); INSERT INTO EMP_T VALUES(2015003, 'GEORGE'); DECLARE ctx ctxHandle; result CLOB; BEGIN ctx := DBMS_XMLGEN.NEWCONTEXT('select * from EMP_T'); DBMS_XMLGEN.SETMAXROWS(ctx, 1); result := DBMS_XMLGEN.GETXML(ctx); DBMS_OUTPUT.PUT_LINE(result); DBMS_XMLGEN.CLOSECONTEXT(ctx); END; /
NULL 데이터 처리 방식을 설정한다.
SETNULLHANDLING 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_XMLGEN.SETNULLHANDLING ( ctx IN ctxHandle, flag IN NUMBER );
파라미터
파라미터 | 설명 |
---|---|
ctx | NULL 데이터 처리 방식을 설정할 컨텍스트 핸들이다. |
flag | NULL 데이터 처리 방식을 결정하는 flag 값이다.
|
예제
CREATE TABLE EMP_T (EMP_ID NUMBER, EMP_NAME VARCHAR2(16)); INSERT INTO EMP_T VALUES(2015001, 'TOM'); INSERT INTO EMP_T VALUES(2015002, NULL); INSERT INTO EMP_T VALUES(2015003, 'GEORGE'); DECLARE ctx ctxHandle; result CLOB; BEGIN ctx := DBMS_XMLGEN.NEWCONTEXT('select * from EMP_T'); DBMS_XMLGEN.SETNULLHANDLING(ctx, DBMS_XMLGEN.EMPTY_TAG); result := DBMS_XMLGEN.GETXML(ctx); DBMS_OUTPUT.PUT_LINE(result); DBMS_XMLGEN.CLOSECONTEXT(ctx); END; /
GETXML 또는 GETXMLType의 XML Output의 Row Tag 이름을 설정한다.
SETROWTAG 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_XMLGEN.SETROWTAG ( ctx IN ctxHandle, rowTagName IN VARCHAR2 );
파라미터
파라미터 | 설명 |
---|---|
ctx | NEWCONTEXT 함수 호출에 의해 실행된 컨텍스트 핸들이다. |
rowTagName | 설정할 Row Tag 이름이다. |
예제
CREATE TABLE EMP_T (EMP_ID NUMBER, EMP_NAME VARCHAR2(16)); INSERT INTO EMP_T VALUES(2015001, 'TOM'); INSERT INTO EMP_T VALUES(2015002, 'DAVID'); INSERT INTO EMP_T VALUES(2015003, 'GEORGE'); DECLARE ctx ctxHandle; result CLOB; BEGIN ctx := DBMS_XMLGEN.NEWCONTEXT('select * from EMP_T'); DBMS_XMLGEN.SETROWTAG(ctx, 'MYROWTAG'); result := DBMS_XMLGEN.GETXML(ctx); DBMS_OUTPUT.PUT_LINE(result); DBMS_XMLGEN.CLOSECONTEXT(ctx); END; /
GETXML 또는 GETXMLType의 XML Output의 Row Set Tag 이름을 설정한다.
SETROWSETTAG 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_XMLGEN.SETROWSETTAG ( ctx IN ctxHandle, rowSetTagName IN VARCHAR2 );
파라미터
파라미터 | 설명 |
---|---|
ctx | NEWCONTEXT 함수 호출에 의해 생선된 컨텍스트 핸들이다. |
rowSetTagName | 설정할 Row Set Tag 이름이다. |
예제
CREATE TABLE EMP_T (EMP_ID NUMBER, EMP_NAME VARCHAR2(16)); INSERT INTO EMP_T VALUES(2015001, 'TOM'); INSERT INTO EMP_T VALUES(2015002, 'DAVID'); INSERT INTO EMP_T VALUES(2015003, 'GEORGE'); DECLARE ctx ctxHandle; result CLOB; BEGIN ctx := DBMS_XMLGEN.NEWCONTEXT('select * from EMP_T'); DBMS_XMLGEN.SETROWSETTAG(ctx, 'MYROWSETTAG'); result := DBMS_XMLGEN.GETXML(ctx); DBMS_OUTPUT.PUT_LINE(result); DBMS_XMLGEN.CLOSECONTEXT(ctx); END; /
GETXML 또는 GETXMLType에서 처리하지 않고 무시할 로우의 수를 설정한다.
SETSKIPROWS 프러시저의 세부 내용은 다음과 같다.
프로토타입
DBMS_XMLGEN.SETSKIPROWS ( ctx IN ctxHandle, skipRows IN NUMBER );
파라미터
파라미터 | 설명 |
---|---|
ctx | 실행한 쿼리의 컨텍스트 핸들이다. |
skipRows | 무시할 로우의 수이다. |
예제
CREATE TABLE EMP_T (EMP_ID NUMBER, EMP_NAME VARCHAR2(16)); INSERT INTO EMP_T VALUES(2015001, 'TOM'); INSERT INTO EMP_T VALUES(2015002, 'DAVID'); INSERT INTO EMP_T VALUES(2015003, 'GEORGE'); DECLARE ctx ctxHandle; result CLOB; BEGIN ctx := DBMS_XMLGEN.NEWCONTEXT('select * from EMP_T'); DBMS_XMLGEN.SETSKIPROWS(ctx, 1); result := DBMS_XMLGEN.GETXML(ctx); DBMS_OUTPUT.PUT_LINE(result); DBMS_XMLGEN.CLOSECONTEXT(ctx); END; /