가장 간단한 대답은 디코드를 사용하지 않고 대신 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