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 문을 사용하는 것이 더 효율적이고 가독성이 좋습니다.
반응형