CASE문의 사용법은 자바와 같다
CASE
WHEN 컬럼명 + 조건
THEN 위 조건이 맞다면
ELSE 아니라면
END
하지만 특정 조건이 있는데 아래코드로 설명하겠다
BOARDID 컬럼은 NVARCHAR이라고 가정하자
BOARDNUMBER 컬럼은 VARCHAR이라고 가정하자
''로 선언된 문자열은 VARCHAR이라고 가정하자
CASE
WHEN BOARDID IS NOT NULL --boardId가 null이 아니라면
THEN TO_CHAR(CONCAT('0_', BOARDID)) --boardId 값 앞에 0_문자열을 붙이고 문자열로 변환
WHEN BOARDNUMBER IS NOT NULL --boardId가 null이 아니라면
THEN TO_CHAR(CONCAT('0', BOARDNUMBER))
ELSE NULL -- 두 조건 전부 아니라면 NULL을 반환
END
특정조건을 만족했을 때의 THEN의 반환값을 TO_CHAR()을 사용해 데이터 타입을 통일 시켰다
오라클의 CASE문은 THEN에 작성하는 반환타입이 전부 동일해야만한다
도중에 CONCAT()을 사용해 문자열을 붙였지만
기본적으로 "함수가 반환하는 값의 데이터 타입은 기본값을 기준"으로 하기때문에
BOARDID가 NVARCHAR라면 CONCAR()함수를 사용해 문자열을 합쳤으면
합친 문자열(반환값)도 NVARCHAR타입이다
CONCAT('0_', BOARDID)
그렇기 때문에 아래처럼 TO_CHAR()을 사용해 VARCHAR타입으로 변환해주는 작업이 필요하다
TO_CHAR(CONCAT('0_', BOARDID))
만인 THEN에 작성하는 반환값이 NUBER형이라면 CASE문의 모든 반환타입은 NUMBER타입이여만 하므로
TO_NUMBER()를 사용해 데이터 타입을 통일 시켜주어야 한다
'DB > Oracle' 카테고리의 다른 글
[ORACLE] DECODE (0) | 2020.10.28 |
---|---|
[ORACLE] WHERE 동적 조건문 작성법 (0) | 2020.10.22 |
[ORACLE] 연산자 및 내장함수 사용시 주의 점 (0) | 2020.10.14 |
[ORACLE] 처리 순서와 테이블의 관계(전역테이블 지역테이블 ) (0) | 2020.10.14 |
[ORACLE] 문자 관련 함수 (0) | 2020.10.06 |