오라클 데이터베이스에서 행, 즉 로우를 합치는 방법에 대해 안내해 드리려고 합니다. 우선 사용하려는 함수는 다음과 같습니다.
- LISTAGG 함수로 손쉽게 행을 합칠 수 있습니다. 다만, 오라클 11g 이상의 버전을 사용하셔야 합니다.
- WM_CONCAT 함수는 오라클 10g 정도에서 사용이 가능한데, 성문화 되어 있지 않은 함수라 사용을 추천하지는 않습니다.
- XMLAGG 함수는 가장 복잡한 형태를 취하고 있으며, 오라클 9i에서 사용이 가능합니다.
다음과 같이 사용할 수 있으며, 이번 예제에서는 EMP 테이블의 로우에 대해 JOB을 그룹하여 EMPNO를 합치는 결과를 안내해 드리겠습니다.
SELECT JOB,
SUBSTR (
XMLAGG (XMLELEMENT (BS, ',', EMPNO) ORDER BY EMPNO).EXTRACT (
'//text()'),
2)
"9i",
WM_CONCAT (EMPNO) "10g",
LISTAGG (EMPNO, ',') WITHIN GROUP (ORDER BY EMPNO) "11g"
FROM EMP
GROUP BY JOB;결과는 다음과 같이 동일합니다.
JOB
9i
10g
11g
------------------
ANALYST
7788,7902
7788,7902
7788,7902
CLERK
7369,7876,7900,7934
7369,7934,7900,7876
7369,7876,7900,7934
MANAGER
7566,7698,7782
7698,7566,7782
7566,7698,7782
PRESIDENT
7839
7839
7839
SALESMAN
7499,7521,7654,7844
7499,7844,7654,7521
7499,7521,7654,7844
