문제
다음 SQL의 결과는? (Oracle)
SQLWITH temp AS ( SELECT 'A' col1, 10 col2 FROM DUAL UNION ALL SELECT 'B', NULL FROM DUAL UNION ALL SELECT NULL, 20 FROM DUAL ) SELECT CASE WHEN col1 IS NULL THEN NVL2(col2, 'HAS_VAL', 'NO_VAL') ELSE COALESCE(col1, 'DEFAULT') END result FROM temp;
① A, B, HAS_VAL
② A, B, NO_VAL
③ A, DEFAULT, HAS_VAL
④ DEFAULT, B, HAS_VAL
정답
1번
해설
첫 번째 행: col1='A'이므로 ELSE절 실행, COALESCE('A', 'DEFAULT')는 'A' 반환. 두 번째 행: col1='B'이므로 ELSE절 실행, COALESCE('B', 'DEFAULT')는 'B' 반환. 세 번째 행: col1=NULL이므로 WHEN절 실행, NVL2(20, 'HAS_VAL', 'NO_VAL')는 col2가 NULL이 아니므로 'HAS_VAL' 반환. ②는 세 번째 행 결과가 틀림. ③은 두 번째 행 결과가 틀림. ④는 첫 번째 행 결과가 틀림.