1
2
3
4
5
|
SELECT
DEPTNO
,ENAME
FROM EMP
ORDER BY DEPTNO;
|
ORACLE SCOTT계정의 EMP테이블의 내용입니다.
RDB에 익숙해지면 위와같은 결과가 눈에 잘 들어옵니다. 하지만, 일반 문서에서는 각 부서별로 어떤 사람들이 있는지 ','를 구분자로 데이터를 보는게 이해하기 편할 것 입니다.
LISTAGG 함수
1
2
3
4
5
|
SELECT
DEPTNO
,LISTAGG(ENAME, ',') WITHIN GROUP(ORDER BY ENAME) AS EMPS
FROM EMP
GROUP BY DEPTNO;
|
LISTAGG함수를 사용하면 가로로 나열할 수 있습니다. GROUP BY한 결과에 대해서 GROUP안의 칼럼을 나열시킬 수 있습니다.
MULTI INDEX 확인
LISTAGG함수는 어느때에 사용이 될까요? 문서작성이 필요할때 사요될수도 있고, DB내에서는 MULTI INDEX에서 어떤 컬럼이 사용되고 있는지 보기 쉽게 출력할 수 있습니다.
1
2
|
CREATE INDEX EMP_MULTI_IDX
ON EMP (DEPTNO, JOB, MGR);
|
DEPTNO, JOB, MGR을 묶어 하나의 INDEX로 만들어 줬습니다.
1
2
3
4
5
6
|
SELECT
INDEX_NAME
,COLUMN_NAME
,COLUMN_POSITION
FROM USER_INDEXES NATURAL JOIN USER_IND_COLUMNS
WHERE TABLE_NAME = 'EMP';
|
생성한 INDEX를 확인해보니 MULTI COLUMN INDEX의 경우 각각 다른 행으로 데이터 출력됩니다. 좀 더 편하게 확인하기 위해 LISTAGG 함수를 사용해서 가로로 나열할 수 있습니다.
1
2
3
4
5
6
7
8
|
SELECT
INDEX_NAME
,LISTAGG(
INDEX_NAME || ':' || COLUMN_POSITION, ','
) WITHIN GROUP(ORDER BY INDEX_NAME) AS IDXS
FROM USER_INDEXES NATURAL JOIN USER_IND_COLUMNS
WHERE TABLE_NAME = 'EMP'
GROUP BY INDEX_NAME;
|
댓글0