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;
|
๋๊ธ