db/oracle

오라클 decode 다중조건

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

oracle decode 다중조건

오라클 DECODE 함수의 다중 조건 활용
  • DECODE 함수는 하나의 컬럼 값을 여러 값과 비교하여 각 조건에 맞는 값을 반환하는 유용한 함수입니다. 특히 다중 조건을 사용하여 복잡한 논리를 구현할 수 있다는 점이 큰 장점입니다.
다중 조건 사용 방법
  • DECODE 함수 내에서 여러 개의 DECODE 함수를 중첩하여 사용하면 다중 조건을 만들 수 있습니다.
DECODE(컬럼, 비교값1, DECODE(내부컬럼, 내부비교값1, 내부반환값1, ...),
              비교값2, 반환값2,
              ...,
              기본값)
  • 외부 DECODE : 가장 바깥쪽의 DECODE 함수로, 첫 번째 조건을 검사합니다.
  • 내부 DECODE : 외부 DECODE의 조건이 참일 때 실행되는 DECODE 함수로, 내부 조건을 검사합니다.
예시
  • 부서별, 급여 등급별 보너스 지급
SELECT deptno, sal,
       DECODE(deptno, 10, DECODE(sal, 2000, 100, 3000, 200, 0),
                      20, DECODE(sal, 2500, 150, 3500, 250, 0),
                      0) AS bonus
FROM emp;

※ 위 쿼리는 부서번호가 10이고 급여가 2000 이상이면 100, 3000 이상이면 200, 그 외에는 0의 보너스를 지급합니다. 부서번호가 20인 경우에도 비슷한 논리가 적용됩니다.

주의 사항
  • 중첩 깊이 : 너무 많은 중첩은 코드 가독성을 저하시킬 수 있습니다. 가능하면 CASE WHEN THEN ELSE END 문을 사용하여 코드를 간결하게 만들 수 있습니다.
  • 성능 : 복잡한 다중 조건은 쿼리 성능에 영향을 줄 수 있습니다. 인덱스를 적절히 활용하여 성능을 향상할 수 있습니다.
CASE WHEN THEN ELSE END 와의 비교
  • DECODE : 간단한 조건 비교에 유용하며, 중첩을 통해 다중 조건을 구현할 수 있습니다.
  • CASE WHEN THEN ELSE END : 더 복잡한 논리 연산이나 다양한 조건을 처리하는 데 유리하며, 가독성이 좋습니다. 

※ DECODE 함수는 다중 조건을 처리하는 강력한 도구이지만, 과도한 중첩은 코드를 복잡하게 만들 수 있습니다. CASE WHEN THEN ELSE END 문과 함께 사용하여 최적의 쿼리를 작성하는 것이 좋습니다.



반응형