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) 정도의 짧은 데이터가 한개, 많아야 두개 묶이는 데이터여서 큰 문제는 없을 것 같다.
참고
'개발 > DB' 카테고리의 다른 글
[ORACLE] 테이블, PK, 인덱스 생성 / 컬럼 추가, 수정, 삭제 (0) | 2022.05.19 |
---|---|
[MS-SQL/ORACLE] 테이블 데이터 복사(INSERT into select...) (0) | 2022.05.12 |