[Oracle|오라클] WM_CONCAT DISTINCT 오류 (ORA-30482: DISTINCT 옵션은 이 함수에 사용할 수 없습니다)

WM_CONCAT DISTINCT 오류 시 대체 방법


오라클 10g 부터 WM_CONCAT 함수를 사용하여 컬럼 값을 합칠수 있다. (오라클 12C 부터는 사용못함)

WM_CONCAT(DISTINCT JOB) 을 쿼리툴에서는 잘 실행이 되지만 Procedure, Function 에서 사용시 에러가 발생한다.


PL/SQL: ORA-30482: DISTINCT 옵션은 이 함수에 사용할 수 없습니다


WM_CONCAT보다는 조금 복잡하지만 아래의 방법으로 대체할 수 있다.


--Oracle 10g, 11g r1 SELECT REGEXP_REPLACE( SUBSTR(XMLAGG(XMLELEMENT(JOB, ',', JOB) ORDER BY JOB).EXTRACT('//text()'), 2) , '([^,]+)(,\1)*(,|$)', '\1\3') RESULT_JOB FROM SCOTT.EMP ; --Oracle 11g r2 SELECT REGEXP_REPLACE( LISTAGG (JOB, ',') WITHIN GROUP (ORDER BY JOB) , '([^,]+)(,\1)*(,|$)', '\1\3') RESULT_JOB FROM SCOTT.EMP


XMLAGG (오라클 9i 이상), LISTAGG(오라클 11g r2 이상) 함수를 사용하여 컬럼값을 합친다. 정렬도 같이 해야 한다.

REGEXP_REPLACE (오라클 10g 이상) 함수를 사용하여 쉼표(,)로 구분하여 연속된 값을 제거한다.


 





 

댓글

Designed by JB FACTORY