DATA 전문가로 가는 길

[SQL] NULL과 NULL 비교 방법(SYS_OP_MAP_NONNULL 함수 응용) 본문

Data Architecture/SQL Query

[SQL] NULL과 NULL 비교 방법(SYS_OP_MAP_NONNULL 함수 응용)

EstenPark 2012. 2. 1. 10:28
/*
  Oracle의 SYS_OP_MAP_NONMULL  함수는 비공식적인 함수지만 가끔 유용하게 사용할 수 있습니다.
  NULL 값끼리 '=' 비교(NULL = NULL)하면 FALSE 지만 TRUE가 되도록 처리해야 하는 경우가 있고, 그럴 때 이 함수를 사용하면 됩니다.
  
  A : NULL
  B : NOT NULL
  C : NULL
*/

SELECT    A.*
         ,-- 일반 조건절로 대입했을 경우
          CASE
            WHEN A = B THEN 'TRUE' -- NULL = NOT NULL = FALSE
            ELSE 'FALSE'
          END
            COL1
         ,CASE
            WHEN A = C THEN 'TRUE' -- NULL = NULL = FALSE
            ELSE 'FALSE'
          END
            COL2
         ,-- SYS_OP_MAP_NONNULL 비공식 함수
          CASE
            WHEN SYS_OP_MAP_NONNULL(A) = SYS_OP_MAP_NONNULL(B) THEN 'TRUE' -- NULL = NOT NULL = TRUE
            ELSE 'FALSE'
          END
            COL3
         ,CASE
            WHEN SYS_OP_MAP_NONNULL(A) = SYS_OP_MAP_NONNULL(C) THEN 'TRUE' -- NULL = NULL = FALSE
            ELSE 'FALSE'
          END
            COL4
FROM      (SELECT    NULL A, 'DATA' B, NULL C
           FROM      DUAL) A

만약 SYS_OP_MAP_NONNULL 함수를 사용하지 않는다면 NVL(A, 0) = NVL(B, 0)와 같이 쿼리를 작성해도 됩니다.

Comments