WM_CONCAT과 DISTINCT 기능을 함께 이용하다 발생한 오류.

SELECT 결과에 CLOB 주소값?이 나오고, ORA-00932 오류가 발생했다.

 

문제가 되었던 함수는 아래의 wm_concat과 distinct...

 

wm_concat(distinct(컬럼명))

 

row 데이터를 A, B, C 이런식으로 자동 나열해주는 wm_concat...

찾아보니 이 wm_concat 함수가 10g 이상에서만 사용 가능하다고 해서,

혹시 버전호환 문제일까? 했는데 아니었다... (11g사용)

 

wm_concat은 데이터를 CLOB 타입으로 return하는데, 

중복을 제거해주는 DISTINCT 함수는 CLOB 타입을 지원하지 않아서 생긴 문제였다.

 

11g에서 사용 가능한 ListAgg 함수는 DISTINCT를 사용할 수 없어서

wm_concat 함수를 그대로 이용하는 방법을 찾아봤다.

 

to_char(wm_concat(distinct(컬럼명)))

 

이렇게 감싸주니 생각보다 간단히 해결되었다.

물론 진짜 CLOB 타입이 필요한 아주 긴 데이터였으면 곤란했겠지만,

실제로는 VARCHAR2(20 BYTE) 정도의 짧은 데이터가 한개, 많아야 두개 묶이는 데이터여서 큰 문제는 없을 것 같다.

 

 

 

참고

http://gurubee.net/article/55512

https://blog.daum.net/jwchoi1224/70

+ Recent posts