1. WM_CONCAT
* 중복제거 가능(DISTINCT 사용) , 10~11g
SELECT WM_CONCAT(DISTINCT 컬럼명)
FROM 테이블명 ;
2. LISTAGG
* 4000byte 초과시 에러, 11g
SELECT LISTAGG('컬럼명', ',') WITHIN GROUP (ORDER BY '정렬할 컬럼')
FROM '테이블명' ;
* LISTAGG는 DISTINCT 사용이 불가능하기 때문에 정규식을 사용해서 중복을 제거
SELECT
REGEXP_REPLACE( LISTAGG('컬럼명', ',')
WITHIN GROUP(ORDER BY '정렬할 컬럼').EXTRACT('//text()').'([^,]+)(,\1)*(,|$)', '\1\3')
FROM '테이블명' ;
3. XMLAGG
* 4000byte 초과시 사용
SELECT
XMLAGG(XMLELEMENT('테이블명', '컬럼명'|| ',')
ORDER BY '정렬할 컬럼').EXTRACT('//text()').GETCLOBVAL()
FROM '테이블명' ;
* xmlagg 사용해도 에러가 날 경우
서브쿼리에 listagg 에 담아 크기 줄이고 조회하기.
'SQL' 카테고리의 다른 글
SQL_ DECODE, COALESCE, NULLIF, NVL, NVL2 (0) | 2023.10.13 |
---|---|
ORACLE_LOCK 개체 확인 및 KILL(해제) (0) | 2022.08.05 |
SQL_ CASE(조건) 와 NULL(변경) (0) | 2021.08.22 |
SQL_데이터타입 / DATE (0) | 2021.08.21 |
SQL_기초2 (0) | 2021.08.20 |
댓글