2016-11-15 3 views

답변

3

가장 간단한 대답은 디코드를 사용하지 않고 대신 case 문을 사용하는 것입니다.

select 1 value1, 
     case when 'a' = 'a' and 'b' = 'b' then 'pass' 
      else 'fail' 
     end result 
from dual; 

    VALUE1 RESULT 
---------- ------ 
     1 pass 

DECODE를 사용하는 것이 가능하지만, 중첩 된 디코딩을 사용해야 할 것 당신이 읽고 이해하기 때문에 유지하기 위해 더 열심히 무언가로 끝날 것입니다. 세 번째 조건을 추가해야하는 경우 어떻게됩니까? 아니면 패스 결과가되는 결과 집합이 여러 개있을 수 있습니까? 당신은 정말로 끔찍한 뭔가를 시도하고 이해하게 될 것입니다!

하지만, 당신이 정말로해야하는 경우, 여기에 예입니다 ((이럴입니다 해당 CASE 식 솔루션과 함께이) 훨씬 쉽게 읽을 수 있습니다) :

with sample_data AS (SELECT 1 ID, 'a' col1, 'b' col2 FROM dual UNION ALL 
        SELECT 2 ID, 'a' col1, 'c' col2 FROM dual UNION ALL 
        SELECT 3 ID, 'd' col1, 'b' col2 FROM dual UNION ALL 
        SELECT 4 ID, 'e' col1, 'f' col2 FROM dual) 
SELECT ID, 
     CASE WHEN col1 = 'a' AND col2 = 'b' THEN 'pass' 
      ELSE 'fail' 
     END case_result, 
     DECODE(col1, 'a', DECODE(col2, 'b', 'pass', 
             'fail'), 
        'fail') decode_result 
FROM sample_data; 

     ID CASE_RESULT DECODE_RESULT 
---------- ----------- ------------- 
     1 pass  pass 
     2 fail  fail 
     3 fail  fail 
     4 fail  fail