오라클에서 쿼리를 실행하다가 ORA-01489 에러를 마주했다.
이 에러는 문자열 연결의 결과가 너무 길어서 발생한다. 구체적으로는, LISTAGG() 함수의 결과가 VARCHAR2(4000)의 최대 길이를 초과할 때 발생함
기존 쿼리
SELECT LISTAGG(COLUMN, ' -> ') WITHIN GROUP (ORDER BY COLUMN2) FROM TABLE_NAME;
문제 원인
위 쿼리는 특정 컬럼의 값을 연결하여 하나의 문자열로 반환하는데, 이 과정에서 결과 문자열이 VARCHAR2(4000)의 길이를 넘어서면서 에러가 발생함
해결 방법
에러를 해결하기 위해 LISTAGG() 함수에 ON OVERFLOW TRUNCATE 옵션을 사용하여 결과 문자열이 최대 길이를 초과할 경우 나머지 데이터를 '...'으로 대체하도록 수정함
수정 쿼리
SELECT LISTAGG(COLUMN, ' -> ' ON OVERFLOW TRUNCATE '...' WITHOUT COUNT) WITHIN GROUP (ORDER BY COLUMN2) FROM TABLE_NAME;