본문 바로가기
IT/DB

[ORACLE] 오라클 문자열 붙이기 / WM_CONCAT / LISTAGG

by 스터딩아재 2021. 8. 20.
반응형

 

* WM_CONCAT, LISTAGG, 문자열 연결, 컬럼 붙이기, 컬럼연결, 여러행합치기

* 10g~11g R1에서는 WM_CONCAT, 11g R2 이상부터는 LISTAGG 사용

  (버전모르겠으면 그냥 다해보고 되는거 하면됩니다)

 

* 모두 GROUP 함수이기 때문에 GROUP BY는 생략.

 

1. WM_CONCAT  ( 10g ~ 11g R1 )

-- 문자열/컬럼내용 붙이기
SELECT   WM_CONCAT(컬럼명)
FROM   테이블명
> ROW1,ROW2,ROW3,ROW4,ROW4

-- 중복 제거하자
SELECT   WM_CONCAT(DISTINCT 컬럼명)
FROM   테이블명
> ROW1,ROW2,ROW3,ROW4

-- 예쁘게 정리하자
SELECT REPLACE(WM_CONCAT(DISTINCT 컬럼명), ',', ', ')
FROM   테이블명
> ROW1, ROW2, ROW3, ROW4

 

반응형

 

2. LISTAGG ( 11g R2~ )

-- LISTAGG 기본
SELECT  LISTAGG(컬럼명, ',')            -- 단순 LISTAGG
FROM   테이블명

-- 응용
SELECT  다른컬럼1,
        LISTAGG(컬럼명, ',')           
        WITHIN GROUP (ORDER BY 정렬컬럼) -- 정렬
        OVER(PARTITION BY 다른컬럼1)     -- 다른컬럼과 같이 쓸때, 정렬 필수
FROM   테이블명

 

* GROUP BY 컬럼에 NULL이 있으면 에러 납니다.

* LISTAGG도 길어지면 문제 생긴다. 4000자 초과 시 옵션을 주는 방법이 있습니다.

 

 

1) LISTAGG 결과 4000자 초과 에러 발생 시 아래 링크 참고 (12c 이상)

2021.08.20 - [Oracle] - [ORACLE] LISTAGG 4000자 초과/길이 초과 ON OVERFLOW 절

 

[ORACLE] 오라클 ORA-01489 LISTAGG 길이 초과

* 길이 초과 ON OVERFLOW TRUNCATE 절 Oracle 12c 이상 * WM_CONCAT에선 SUBSTR 하자 * LISTAGG 쓰다가 ORA-01489: result of string concatenation is too long 에러날 때 참고 1. 중복 제거 후 붙이기 -- 중복제..

studyingazae.tistory.com

 

 

 

 

그리드형

댓글