문제
다음 SQL의 결과는? (Oracle)
SQLWITH test AS ( SELECT 'A' col1, TO_DATE('2023-02-28', 'YYYY-MM-DD') dt FROM DUAL UNION ALL SELECT 'B', TO_DATE('2023-02-29', 'YYYY-MM-DD') FROM DUAL ) SELECT col1, CASE WHEN dt IS NULL THEN 'INVALID' ELSE TO_CHAR(ADD_MONTHS(dt, 12), 'YYYY-MM-DD') END result FROM test;
① A: 2024-02-28, B: 2024-02-29 ② A: 2024-02-28, B: INVALID ③ A: 2024-03-01, B: INVALID ④ 오류 발생
정답
4번
해설
2023년은 평년이므로 2월 29일이 존재하지 않음. Oracle에서 TO_DATE('2023-02-29', 'YYYY-MM-DD')는 NULL을 반환하는 것이 아니라 'ORA-01839: date not valid for month specified' 오류를 발생시킴. 따라서 WITH 절에서 UNION ALL을 실행하는 과정에서 오류가 발생하여 전체 쿼리가 실패함. ①②③은 모두 쿼리가 정상 실행된다고 가정한 잘못된 선택지임.