Posted
Filed under DataBase/Oracle
1. WM_CONCAT (과거의 방식, 이제는 안녕!)

WM_CONCAT은 오라클 내부적으로 사용되던 함수로, 사용법이 매우 간단해서 예전에는 많이 쓰였습니다.

  • 사용법: SELECT WM_CONCAT(이름) FROM 사원테이블;

  • 장점: 구문이 짧고 간단합니다.

  • ⚠️ 주의사항 (가장 중요!): * 공식 지원 함수가 아닙니다. (언제 사라져도 이상하지 않은 함수였죠.)

    • Oracle 12c 버전부터는 완전히 제거되었습니다. * 즉, 12c 이상의 환경에서 이 함수를 쓰면 에러가 발생하며 시스템이 멈출 수 있습니다.

    • 정렬이 불가능하여 데이터 순서가 제멋대로 섞입니다.

2. LISTAGG (현재의 표준, 강력 권장!)
오라클 11g R2 버전부터 등장한 공식 표준 함수입니다. 현재는 이 방식을 사용하는 것이 정석입니다.

예시)

SELECT LISTAGG(컬럼명, '구분자') WITHIN GROUP (ORDER BY 정렬기준)

FROM 테이블명;

장점:

 

  • 오라클이 공식 지원하므로 안정적입니다.

  • WITHIN GROUP (ORDER BY ...) 구문을 통해 데이터가 합쳐지는 순서를 지정할 수 있습니다.

  • 구분자(콤마, 슬래시 등)를 내 마음대로 지정할 수 있습니다.

구분 WM_CONCAT LISTAGG
권장 여부 사용 금지 (비권장) 적극 권장 (표준)
정렬 기능 지원 안 함 순서 지정 가능
사용 가능 버전 12c 버전부터 삭제됨 11g R2 ~ 최신 버전(23ai)까지
2026/03/19 17:43 2026/03/19 17:43
Posted
Filed under DataBase/Oracle

오라클 SQL을 작성하다 보면 가장 많이 만나는 데이터가 바로 NULL이죠. 이 NULL 값을 아주 스마트하게 처리해주는 효자 함수, NVLNVL2를 이해하기 쉽게 정리해 드립니다!

1. NVL 함수: "NULL이면 이거 써!"

가장 직관적인 함수입니다. 컬럼 값이 비어있을(NULL) 때만 특정 값으로 채워줍니다.

 

  • 구조: NVL(대상컬럼, NULL일 때 값)

  • 언제 쓸까? * 숫자 연산 시 NULL을 0으로 바꾸고 싶을 때

    • 이름이 없는 경우 '이름없음'으로 표시하고 싶을 때

2. NVL2 함수: "있으면 이거, 없으면 저거!"

NVL보다 한 단계 진화한 함수입니다. 데이터가 있는 경우없는 경우 두 가지 상황을 모두 컨트롤할 수 있습니다.

  • 구조: NVL2(대상컬럼, NULL이 아닐 때 값, NULL일 때 값)

  • 언제 쓸까? * 연락처 유무에 따라 '연락가능', '연락불가'라는 상태값을 주고 싶을 때

    • 보너스가 있으면 '대상자', 없으면 '비대상자'로 구분하고 싶을 때

3. SQL 예제
SELECT 
    NAME,
    -- 전화번호가 없으면 '010-0000-0000'으로 채움
    NVL(PHONE, '010-0000-0000') AS NVL_결과,
    
    -- 전화번호가 있으면 'Y', 없으면 'N' 표시
    NVL2(PHONE, 'Y', 'N') AS NVL2_결과
FROM USERS;

2026/03/18 20:33 2026/03/18 20:33