Structured data
- Category
- Database
- 여러 행(ROW)을 하나의 컬럼(COLUMN)으로 합치는 함수이다. 다수의 데이터를 하나의 컬럼으로 구분자를 통해 한 행으로 표현해 줄 수 있는 기능이다. 버젼에 따라 함수에 쓰임이 달라질 수 있다.
문자열 연결 기능 함수 종류 #
- LISTAGG(Oracle11g ver)
- WM_CONCAT(Oracle10g ver)
- XMLAgg(Oracle9g ver)
WM_CONCAT #
- 문자열 연결 기능 Oracle 함수 중 Oracle10g ver. 부터 사용하는 함수이다. 구분자는 자동으로 쉼표(,)를 사용하여 다수의 데이터를 하나의 행으로 가져 올 수 있다.
WM_CONCAT 사용법 #
SELECT WM_COCNAT(컬럼명)
FROM DUAL
WM_CONCAT 예제 #
SELECT USER_NM AS userNm
FROM DUAL
userNm = (박지성
손흥민
안정환) 여러 행의 데이터로 표현
SELECT WM_CONCAT(USER_NM) AS userNm
FROM DUAL
GROUP BY userNm
userNm = 박지성,손흥민,안정환 - 단일 데이터로 표현
XMLAgg,xmlelement #
- 문자열 연결 기능 Oracle 함수 중 Oracle9g ver. 부터 사용하는 함수이다. 구분자는 사용자가 임의로 선택할수 있으며 xmlelemnet 함수와 함께 이용하여 다수의 데이터를 하나의 행으로 가져 올 수 있다. 하지만 WM_CONCAT,LISTAGG 기능에 비하여 복잡하고 성능이 떨어져 잘 사용되지는 않는다.
XMLAgg 사용법 #
SUBSTR(XMLAGG(XMLELEMENT(태그명 ,'.', 컬럼명) ORDER BY 컬럼명).EXTRACT('//text()'), 2) 컬럼명
XMLAgg 예제 #
SELECT USER_NM AS userNm
FROM DUAL
userNm = (박지성
손흥민
안정환) 여러 행의 데이터로 표현
SELECT SUBSTR(XMLAgg(xmelement(A,USER_NM) ORDER BY
USER_NM).EXTRACT('//text()')),2) AS userNm
FROM DUAL
GROUP BY userNm
userNm = 박지성,손흥민,안정환 - 단일 데이터로 표현
SUBSTR => 맨 앞에 들어가는 구분자(,)를 지워준다.
xmelement(A,B) => A는 태그명이며 B는 태그내의 값이다. 값을 태그로 묶어서 표현하 게 된다.
extract => 태그를 뺀 값을 가져온다.