오라클 데이터베이스 10g, 11g 버전을 사용하다가 Oracle 12c 또는 18c, 19c 등으로 업그레이드를 하는 경우 주의해야 할 부분 중의 하나가 wm_concat 함수 입니다.
wm_concat 함수는 아래와 같은 데이터가 있을때,
이것을 deptno 를 기준으로 같은 것을 묶어서 옆으로 쭉 나열하고 싶을때 사용합니다.
근데, 이 쌈빡한 함수 wm_concat( ) 이 사실은 오라클에서 공식으로 발표한 Documented 함수가 아닙니다.
내부 Internal 함수인데, 어떻게 알려지면서 많이 사용하게 되었다고 하네요~ 실제로 Oracle 공식매뉴얼에는 없습니다.
Oracle 10g 에서 11g 로 올라갈때도 이와 비슷한 경우가 있었습니다.
"bypass_ujvc" 라는 힌트였는데, 이것도 비공식 힌트였죠~
어쨌든, 12c 부터는 더이상 wm_concat 함수를 사용할 수 없습니다.
사용하면 "ORA-00904: "WM_CONCAT": invalid identifier" 에러가 발생합니다.
대신, listagg 함수를 사용하면 됩니다. listagg 함수는 Oracle 11g 부터 지원됩니다.
select deptno, wm_concat(ename)
from EMP
group by deptno;
=>
select deptno, listagg(ename, ',') within group (order by ename)
from EMP
group by deptno;
wm_concat() 함수안에서 아래와 같이 distinct 까지 사용한 경우는 from 절에 inline view 형태로 사용해야 합니다.
select deptno, wm_concat(distinct job)
from EMP
group by deptno;
=>
select deptno, listagg(job, ',') within group (order by job)
from (select distinct deptno, job from EMP)
group by deptno;
음~ wm_concat 함수가 쓰긴 훨씬 편했는데~ 많이 번거롭네요~~
'IT관련' 카테고리의 다른 글
Oracle Alert Log, Trace 파일 볼때 컬러풀하게 색깔넣어서 보는 방법 (vim 세팅) (0) | 2021.12.31 |
---|---|
Oracle 19c RAC addnode (노드확장, 노드추가) 예제 - Silent 모드 (0) | 2021.10.11 |
Oracle RAC One Node vs Oracle Restart 차이점 (0) | 2021.09.16 |
오라클 RAC One Node Database 설치하기 (Oracle HA DB) (0) | 2021.09.16 |
서버 2대에 Oracle 19c RAC 설치하기 (Install Grid Infrastructure) - DB 이중화 구성 (0) | 2021.09.15 |