제목

ORACLE - SQL 레코드를 XML로 쉽게 변환하기

작성자

DEV.WON ( http://blog.naver.com/jadin1 )

작성일

2007-06-07

배포

PUBLIC (, 출처는 밝혀 주세요)

들어가기전 잡담.)

날씨가 더워지네요.. 더불어 4학년인 필자도 슬슬 졸업이 다가옵니다. 4학년1학기^^;;;

필자는 요즘 RoR에 빠졌습니다.

프레임워크 XML세팅에 슬슬 짜증이나던 찰나에, 에자일 방법론 이론에 가장 충실할거같다는 생각이 들어 접하게 된

Ruby On Rails .. Ruby의 언어적 이질감이 처음에는 압박이었으나, 모 나름대로 잼있네요..

솔직히 Java의 강력함과 오픈소스...뒤에 은근슬쩍생산성에 대한회의감이 드는 이유는 몰까요?

DB 엔티티 하나 고치게 되면 쭉이어지는 xml 설정값 , 어트리뷰트 들의 코드 수정들..ㅜㅜ

솔직히 그동안 필자는 왠지 인터프리터 방식의 스크립트에 대해 '몬가 부족하다' 혹은 '성능상 안좋을꺼야' 라고 생각했었는데요

스크립트이자, 객체지향 언어인 Ruby의 간결함과 Rails의 강력함에 매료되버렸습니다.

웹2.0 에 나름 충실한 Ajax에 대한 지원도 괜찮았구요.

나중에 시간이 되면 오라클 연동 RoR에 대해 강좌를 만들 생각입니다.

아 한참 다른데로 빠졌네요... 오늘은 MS-SQL의 SELECT ..... FOR XML AUTO 에 상응하는 오라클의 기능을 알아보도록하죠.

이게 무슨기능이냐구요? 바로 SQL 쿼리에 의해 반환된 레코드 집합을 XML로 표현하는겁니다.

요즘 프레임워크 설정부터 , 어플리케이션 인프라 Configuration , 웹서비스는 물론, Ajax,flex 등의 web rich client 등등..

XML의 사용빈도는 점점 증가 하고 있습니다.

이 시점에서 오라클에서 제공하는 XML 지원 패키지에 대해 알아보는 시간을 갖도록하죠.

편의상 짧은 어투 양해바랍니다..^^;

시작)

SELECT 절에 의해 생성된 레코드를 Java 나 pro* c , .net 등의 미들 tier 에서 별도의 XML파싱 작업을 하지않고,

오라클에서 제공하는 패키지를 이용하여 손쉽게 XML으로 표현할수 있다.

9i와 10g에서 XML을 다루는 패키지가 다르니 주의하기바란다.

SELECT * FROM PRT 라는 SQL에 의해 반환되는 레코드는 아래와 같다.

이제 필자가 작성한 10gXML제네릭 함수를 보도록하자.

(9i, 8i 사용자들은 아래의 코드에서 DBMS_XMLQUERY 부분을 XMLGEN으로 바꾸면 된다.

독자중 XMLGEN 패키지가 없는 분들은 oracle.com에서 xsu12.tar.gz 를 다운받아 압축을 푼후, xsu12.jar를

오라클 스키마에 올리도록한다.

이때 사용법은 loadjava -verbose -resolve -user scott/tiger xsu12.jar 이다. (기타 자세한 사용법은 loadjava 을 검색하라.)

(혹은 http://blog.naver.com/jadin1/70018342609이 아티클을 참고하길 바란다.)

함수코드)

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

create or replace function GET_XML_RECORD
(xmlSQL IN VARCHAR2,
encodingType IN VARCHAR2 := 'UTF-8') return CLOB is



Ctx dbms_xmlquery.ctxHandle; -- SQL에서 XML로 컨버팅된 객체 핸들
xmlRecord CLOB; --리턴될 값

begin

--컨텍스트 얻어오기
Ctx := dbms_xmlquery.newContext(xmlSQL);

-- encoding 설정
dbms_xmlquery.setEncodingTag(Ctx,encodingType);

-- xml 생성
xmlRecord := dbms_xmlquery.getXML(Ctx);


RETURN xmlRecord;


end GET_XML_RECORD;
-----------------------------------------------------------------------------------------

사용예)

SELECT GET_XML_RECORD('SELECT * FROM PRT','EUC-KR') FROM DUAL;

결과값)


마지막으로 오라클 도큐먼트에서 도움이 될만한 부분 남깁니다.
DBMS_XMLQUERY패키지..

GETXML

Creates the new context, executes the query, gets the XML back and closes the context. This is a convenience function. The context doesn't have to be explicitly opened or closed. The options are described in the following table.

Syntax Description
FUNCTION getXML(  sqlQuery IN VARCHAR2,  metaType IN NUMBER := NONE) RETURN CLOB; 

This function uses a SQL query in string form.

FUNCTION getXML(  sqlQuery IN CLOB,  metaType IN NUMBER := NONE) RETURN CLOB; 

This function uses a SQL query in CLOB form.

FUNCTION getXML(  ctxHdl IN ctxType,  metaType IN NUMBER := NONE) RETURN CLOB; 

This function generates the XML document based on a SQL query used to initialize the context.

PROCEDURE getXML(  ctxHdl IN ctxType,  xDoc IN CLOB,  metaType IN NUMBER := NONE); 

This procedure generates the XML document based on the SQL query used to initialize the context.

Parameter IN / OUT Description
ctxHdl 
(IN) 

Context handle.

metaType 
(IN) 

XML metadata type (NONE, DTD, or SCHEMA).

sqlQuery 
(IN) 

SQL query.

xDoc 
(IN) 

CLOB into which to write the generated XML document.

위에서 특히나, GETXML 함수에 metaType을 지정하면 meta 정보 (DTD, Schema)가 포함되어 반환됩니다.
아주 유용하죠..
다시금 오라클의 강력함과 동시에 오라클에서 점점 B2B, EAI 에 적합한 XML Service에 비중을 많이 두는것 같은 기분이 듭니다.
그럼 부족한 강좌 끝까지 읽어주셔서 감사합니다.
<
Posted by 나비:D
:
BLOG main image
by 나비:D

공지사항

카테고리

분류 전체보기 (278)
Programming? (0)
---------------------------.. (0)
나비의삽질 (5)
Application (177)
SQL (51)
Web (27)
etc. (14)
Omnia (0)
---------------------------.. (0)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함

달력

«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Total :
Today : Yesterday :