728x90
반응형
LISTAGG() 를 사용하여 A,B,C 이런 식으로 결과를 출력하려 했으나, 어떠한 이유인지 빈 값만 계속 출력되었다.
문법이나 기본 쿼리 구조상은 원인이 없다고 판단. 왜 결과가 안나오는 것일까?
발생 원인
다름이 아닌 LISTAGG 대상 컬럼이 NVARCHAR2 여서 그랬다..
테스트 케이스
with test_table as (
select 1 as num, UNISTR('사과') as name from dual
union all
select 1, UNISTR('배') from dual
union all
select 2, UNISTR('귤') from dual
union all
select 2, UNISTR('참외') from dual
)
select num, listagg(name, ',') within group (order by num) as str
from test_table
group by num;
NVARCHAR2 인 데이터를 LISTAGG 할 시 공백 또는 이상한 문자가 출력될 것이다.
해결 방법
NAVARCHAR2 인 데이터를 VARCHAR2로 변환하여 처리하면 된다.
변환 방법 : CAST(컬럼 AS 데이터타입) - CAST(name AS VARCHAR2(1000))
데이터 크기는 상황에 맞게 적당하게 주면 된다. 부족하면 ORA-01401: inserted value too large for column 에러 발생
with test_table as (
select 1 as num, UNISTR('사과') as name from dual
union all
select 1, UNISTR('배') from dual
union all
select 2, UNISTR('귤') from dual
union all
select 2, UNISTR('참외') from dual
)
select num, listagg(cast(name as varchar2(1000)), ',') within group (order by num) as str
from test_table
group by num;
문법 문제인지, 조인이 잘못된 건지 한참을 검수했는데 허무하게 원인을 발견했다.
728x90
반응형
'Oracle' 카테고리의 다른 글
[Oracle] ORA-01795 : 목록에 지정 가능한 식의 최대수는 1000 입니다. (1) | 2023.11.13 |
---|---|
[Oracle] NVARCHAR2에서 VARCHAR2로 형 변환 하기 (0) | 2023.10.04 |
[Oracle] ORA-01839 : "지정된 월에 대한 날짜가 부적합합니다" 해결 feat. ChatGPT (0) | 2023.04.04 |
DBCP(Database Connection Pool) validationQuery 설정 (0) | 2022.06.18 |
[ORACLE] ORA-03113 : Merge 사용 시 에러 발생 (0) | 2022.04.20 |
댓글