db/oracle

오라클 DECODE 함수와 NULL 값 처리

strange-dev 2025. 1. 23. 23:23
반응형

오라클 DECODE 함수와 NULL 값 처리

DECODE 함수란?
  • DECODE 함수는 오라클 데이터베이스에서 특정 값을 비교하여 다른 값으로 변환하는 데 사용되는 함수입니다. 간단히 말해, 조건문과 유사한 역할을 하며, 특정 조건에 따라 다른 값을 반환합니다.
NULL 값과 DECODE 함수
  • DECODE 함수에서 NULL 값을 다룰 때는 몇 가지 특징을 기억해야 합니다.
  • NULL은 모든 값과 다르다 : NULL은 어떤 값과도 같지 않다고 간주됩니다. 따라서 NULL 값을 다른 값과 비교하면 항상 FALSE가 반환됩니다.
  • NULL 값 비교 : DECODE 함수에서 NULL 값을 직접 비교하는 것은 불가능합니다.
NULL 값 처리 예시
SELECT employee_id,
       salary,
       DECODE(salary, 
              NULL, '급여 정보 없음', 
              salary * 1.1, '10% 인상') AS new_salary
FROM employees;
  • salary가 NULL인 경우 '급여 정보 없음'으로 표시됩니다.
  • salary가 NULL이 아닌 경우 10% 인상된 값이 new_salary에 저장됩니다.

※ 하지만 위 쿼리는 의도한대로 작동하지 않습니다. 왜냐하면 salary가 NULL일 때 DECODE 함수는 첫 번째 비교인 salary = NULL을 수행하고, 항상 FALSE가 되기 때문입니다. 따라서 두 번째 인자인 '급여 정보 없음'이 아닌 세 번째 인자인 salary * 1.1을 계산하려고 시도하고, 결국 오류가 발생할 수 있습니다.

NULL 값 처리를 위한 올바른 방법
  • NULL 값을 처리하기 위해서는 NVL 함수와 함께 사용하는 것이 일반적입니다. NVL 함수는 첫 번째 인자가 NULL인 경우 두 번째 인자를 반환하는 함수입니다.
SELECT employee_id,
       salary,
       DECODE(NVL(salary, 0), 
              0, '급여 정보 없음', 
              salary * 1.1, '10% 인상') AS new_salary
FROM employees;
  • NVL(salary, 0)을 통해 salary가 NULL인 경우 0으로 변환합니다.
  • DECODE 함수에서 salary 대신 NVL(salary, 0)을 사용하여 NULL 값을 처리합니다.
결론
  • DECODE 함수는 NULL 값을 직접 비교할 수 없기 때문에, NULL 값을 처리할 때는 NVL 함수와 함께 사용하는 것이 일반적입니다. NVL 함수를 통해 NULL 값을 다른 값으로 대체하고, DECODE 함수에서 이를 활용하여 원하는 결과를 얻을 수 있습니다.
주의
  • DECODE 함수는 비교적 간단한 조건 처리에 유용하지만, 복잡한 조건이나 다양한 데이터 형식을 다룰 때는 CASE WHEN 문을 사용하는 것이 더 효율적이고 가독성이 좋습니다.

반응형