-
[Oracle/SQL] 오라클 채번시 DECODE, NVL 조건을 사용한 SELECT 단건조회 쿼리문개발자 레퍼런스 2009. 6. 27. 21:17반응형오라클 채번시 DECODE, NVL 조건을 사용한 SELECT 단건조회 쿼리
오라클이나 MySQL을 사용하여 금융 IT 업무를 개발하다보면 특정 조건에 맞는 일련번호로 채번을 해야하는 경우가 있습니다.
채번에는 여러가지 방식이 사용될 수 있는데..
쿼리문 내에서 처리하지 않고 C 프로그래밍 상에서 처리할 수 있으나 경험상 쿼리문 내에서 조건에 맞게 채번을 해서 결과를 내 주는것이 편할때가 많습니다.
NVL 과 DECODE 를 사용해 채번하는 쿼리문을 알아보도록 하겠습니다.
NVL(expr1, expr2)
expr1 : 널을 포함하는 표현식의 소스 값, 반환되는 값은 항상 expr1의 데이터 유형과 동일
expr2 : 널을 변환할 대상 값
이라고 표현할 수 있으나 이러면 무슨말인지 잘 모르는 분이 많습니다. 저역시 처음 공부할때 이게 문말인가 했구으니...
이 함수는 간단히 말하자면
expr1 의 값이 null 이 아니라면 expr1의 값이 결과값이 되고,
만약 expr1의 값이 null 이라면 expr2의 값이 된다는 의미 입니다.
SELECT
NVL(substr(max(tup_c),1,2) || to_char(to_number(substr(max(tup_c),3,4)) + 1, 'fm0000')) , ('N10001') ) AS tup_c
FROM tb_cs_jh_cm_tupbsc
WHERE tup_c like 'N' || '%'
NVL은 null 값 혹은 특정한 값을 원할경우 채번에 사용될 수 있습니다.
다만, expr1의 값이 만약 null이 아닌 값일 수밖에 없는경우 (예를들면 상수)는
NVL로는 채번 조건 쿼리를 만들 수 없습니다.
그러므로 아래 예제처럼 substr(:cd_lclc,1,1)와 같은 상수가 포함된 구분은 DEXODE를 사용하여 쿼리를 작성해야 합니다.
DECODE(expr1, expr2, expr3, expr4)
expr1 : 조건을 평가하는 값
expr2 : expr1 이 expr2 인지를 평가할 수 있는 기준값
expr3 : expr1 이 expr2 의 값일 경우 (여기서는 null 일 경우)의 결과
expr2 : expr1 이 expr2 의 값이 아닐 경우 (여기서는 null 이 아닐 경우)의 결과
이 함수는 expr1 이 expr2와 같은지 혹은 다른지 여부를 비교해 같다면 expr3의 결과를 만약 다르다면 expr4의 결과를 얻을 수 있습니다.
C나 JAVA 에서의 if else 문과 유사하다고 생각하시면 이해가 쉬울 것입니다.
SELECT
DECODE(max(tup_c), NULL, ('N' || substr(:cd_lclc,1,1) || '0001'), (substr(max(tup_c),1,1) || substr(:cd_lclc,1,1) || to_char(to_number(substr(max(tup_c),3,4)) + 1, 'fm0000'))) AS tup_c
FROM tb_cs_jh_cm_tupbsc
WHERE tup_c like 'N' || substr(:cd_lclc,1,1) || '%'
NVL이 좀더 간편할 수도 있지만 NVL로 만들 수 없는 채번일 경우도 DECODE 문으로는 가능하기 때문에
NVL과 DECODE 의 쿼리를 둘다 활용가능 하도록 확실히 익혀 놓는 것이 좋습니다.반응형'개발자 레퍼런스' 카테고리의 다른 글