IT/DB
[ORACLE] 오라클 ORA-01489 에러 LISTAGG 길이 초과 시 해결 방법
스터딩아재
2021. 8. 20. 17:26
반응형
* 오라클에서 LISTAGG 길이 초과 시 ON OVERFLOW TRUNCATE 절을 사용 가능하다. (Oracle 12c 이상)
* LISTAGG 초과 건 표기 방법 변경 방법
* WM_CONCAT에선 SUBSTR을 사용하면 된다.
* LISTAGG 쓰다가 ORA-01489: result of string concatenation is too long 에러날 때 참고하면 좋을 것 같다.
1. 중복 제거 후 붙이기
-- 중복제거
SELECT LISTAGG(DISTINCT 컬럼명, ',')
FROM 테이블명
> COL1,COL2,COL3,COL4 --중복 제거 됨
2. 중복 제거 + 4000바이트 초과 건 생략 방법
-- 초과분 생략하기
SELECT LISTAGG(DISTINCT 컬럼명, ',' ON OVERFLOW TRUNCATE)
FROM 테이블명
> COL1,COL2,COL3,COL4,중간생략,COL3880,...(40) --초과된 40건이 더 있다는 뜻
3. 표기 변경 옵션
* TRUNCATE 뒤 문자열이 마지막에 표시
* WITHOUT COUNT 작성 시 숫자 제거
SELECT LISTAGG(컬럼명, ',' ON OVERFLOW TRUNCATE '~초과' WITHOUT COUNT)
FROM 테이블명
> COL1,COL2,COL3,COL4,중간생략,COL3880,~초과
그리드형