1. xlmelement함수
-> 조회된 결과에 테그를 붙여 결과를 xml형태의 자료로 만든다.
예) select a.deptcd,
XMLELEMENT(dept, a.deptcd) xdept
from m_dept a
결과) dept xdept
012345 <dept>012345</dept>
123231 <dept>123231</dept>
,
,
2. xmlagg함수
-> XMLELEMENT에 의해 XML태그를 한줄로 만들어주는 문장
예) select XMLAGG(XMLELEMENT(dept, a.deptcd)) xdept
from m_dept a
결과) xdept
<dept>012345</dept><dept>123231</dept>,,,,,,
응용)
-> XMLELEMENT함수로 조회된 행을 XML태그로 만들고 XMLAGG로 한줄로 만들어서 REPALCE같은 함수로 태그를 적절히 없애주면 끝.. XMLELEMENT함수에는 ORDER BY 절을 사용할 수 있고 XMLAGG는 GROUP BY절과 함께 사용할 수있다.
SYS_CONNECT_BY_PATH함수를 써서 구했는데 속도가 많이 느리다. XMLELEMENT
주의) XMLAGG함수는 CPU사용율이 높고 많은 데이터처리는 되지 않는다.
출처 : http://blog.daum.net/_blog/BlogTypeView.do?blogid=0URLY&articleno=23&_bloghome_menu=recenttext
----------------------------------------------------------------------------------------------
==> XMLELEMENT 예제
WITH T AS
(
SELECT 1 AS COL1, 'A' COL2 FROM DUAL UNION ALL
SELECT 1 AS COL1, 'B' COL2 FROM DUAL UNION ALL
SELECT 1 AS COL1, 'C' COL2 FROM DUAL
)
SELECT COL1
, XMLAGG(XMLELEMENT("NM", COL2, '^') ORDER BY ROWNUM).EXTRACT('//text()').GETSTRINGVAL() AS COL2
, XMLAGG(XMLELEMENT("NM", '^', COL2) ORDER BY ROWNUM).EXTRACT('//text()').GETSTRINGVAL() AS COL3
FROM T
GROUP BY COL1
결과)
1 1 A^B^C^ ^A^B^C
==> 다른 XMLELEMENT 예제
WITH TAB AS
(
SELECT 'X' GBN,'A01' ITEM_CD FROM DUAL UNION ALL
SELECT 'X' GBN,'A02' ITEM_CD FROM DUAL UNION ALL
SELECT 'X' GBN,'B02' ITEM_CD FROM DUAL UNION ALL
SELECT 'Y' GBN,'B01' ITEM_CD FROM DUAL UNION ALL
SELECT 'Y' GBN,'B02' ITEM_CD FROM DUAL UNION ALL
SELECT 'Z' GBN,'G01' ITEM_CD FROM DUAL UNION ALL
SELECT 'Z' GBN,'A02' ITEM_CD FROM DUAL UNION ALL
SELECT 'Z' GBN,'B02' ITEM_CD FROM DUAL
)
/*select gbn, max(decode(rn,1,item_cd)) || max(decode(rn,2,item_cd)) || max(decode(rn,3,item_cd)) as item_cd
from (SELECT tab.*, row_number() OVER(PARTITION BY gbn ORDER BY ROWNUM) AS rn
FROM tab)
group by gbn*/
SELECT GBN
--, xmlagg(XMLELEMENT(ITEM_CD,','||ITEM_CD ) order by gbn)
, SUBSTR(XMLAGG( XMLELEMENT(ITEM_CD,','||ITEM_CD ) ORDER BY GBN ).EXTRACT('//text()').GetStringVal(), 2) as a
FROM TAB
GROUP BY GBN
----------------------------------------------------------------------------------------------
xmlagg, xmlelement함수 -> 여러 로우를 한줄로 표현해보자!
1. xlmelement함수
-> 조회된 결과에 테그를 붙여 결과를 xml형태의 자료로 만든다.
예) select a.deptcd,
XMLELEMENT(dept, a.deptcd) xdept
from m_dept a
결과) dept xdept
012345 <dept>012345</dept>
123231 <dept>123231</dept>
,
,
2. xmlagg함수
-> XMLELEMENT에 의해 XML태그를 한줄로 만들어주는 문장
예) select XMLAGG(XMLELEMENT(dept, a.deptcd)) xdept
from m_dept a
결과) xdept
<dept>012345</dept><dept>123231</dept>,,,,,,
응용)
-> XMLELEMENT함수로 조회된 행을 XML태그로 만들고 XMLAGG로 한줄로 만들어서 REPALCE같은 함수로 태그를 적절히 없애주면 끝.. XMLELEMENT함수에는 ORDER BY 절을 사용할 수 있고 XMLAGG는 GROUP BY절과 함께 사용할 수있다.
SYS_CONNECT_BY_PATH함수를 써서 구했는데 속도가 많이 느리다. XMLELEMENT
주의) XMLAGG함수는 CPU사용율이 높고 많은 데이터처리는 되지 않는다.
----------------------------------------------------------------------------------------------
-- 예제
SELECT XMLELEMENT(
"Data"
,XMLELEMENT(
"Data2"
,XMLFOREST(NVL('test', '') AS "CallNumber"
,NVL('testurl', '') AS "TwitterUrl"
,NVL('testurl1', '') AS "FacebookUrl"
,NVL('ok', '') AS "EnableRemoteSvc")
)
)
AS TEST
FROM DUAL
XMLForest함수는 각 인수의 파라미터를 XML로 변환하고, 변환된 인수를 연결한 XML 단편(fragment)을 반환한다.
만약 value_expr이 스칼라 표현이라면, AS구문은 생략할수 있고, 오라클 데이터베이스는 요소명으로써 열명을 사용한다.
만약 value_expr이 오브젝터 형 또는 콜렉션이라면, AS 구문은 필수적이고, 오라클 데이터 베이스는 tag로 둘러쌓인 지정된 c_alias를 이용한다.
만약 value_expr이 Null이라면, value_expr에 대한 요소는 생성되지 않는다.
다음 예제는 종업원의 부분집합에 대하여 EMP요소를 생성한다. EMP항목으로써 중첩된 employee_id,last_name,salary 요소를 가진다.
SELECT XMLELEMENT("Emp",
XMLFOREST(e.employee_id, e.last_name, e.salary))
"Emp Element"
FROM employees e WHERE employee_id = 204;
Emp Element
----------------------------------------------------------------
<Emp>
<EMPLOYEE_ID>204</EMPLOYEE_ID>
<LAST_NAME>Baer</LAST_NAME>
<SALARY>10000</SALARY>
</Emp>
출처 : http://www.statwith.pe.kr/ORACLE/functions204.htm
-------------------------------------------------------------------------------------------------------
설명없음요~~~예제만
SELECT XMLELEMENT("Collection", XMLATTRIBUTES('TEST-ATTRIBUTE' AS "type"), XMLELEMENT("ContentsType", 'P'), XMLELEMENT("ContentsSequence", '12345')) FROM DUAL
--<Collection type="LED-PTN"><ContentsType>P</ContentsType><ContentsSeq>12345</ContentsSeq></Collection>
'SQL' 카테고리의 다른 글
REGEXP_REPLACE 정규식 표현을 이용한 행변환 (0) | 2013.09.05 |
---|---|
oracle xmltype (0) | 2013.07.04 |
oracle xml (0) | 2013.07.04 |
ORACLE 행을 열로 , 열을 행으로 (0) | 2013.01.29 |
oracle exists vs in (0) | 2013.01.29 |