테마
한빛유통 물류센터는 18시에 그날 출고를 마감한다. 18시 정각부터 들어온 주문은 다음 날 출고분이다. 창고 팀장 태블릿 12대가 출고일을 골라 그날 내보낼 주문 목록을 수시로 연다. 개발자는 회계팀이 준 규칙 문서의 문장("18시 이후 주문은 주문일 + 1일을 출고일로 한다")을 그대로 SQL로 옮겼다. 아래는 출고일 2024년 6월 14일을 조회했을 때다.
T_ORD: 100,000행 · 896블록 · ORD_DT DATE(시분초 있음) · 하루 136 ~ 137건이 서로 다른 블록에 흩어져 있다IX_T_ORD_DT (ORD_DT): BLEVEL 1 · 리프 265블록 · PK_T_ORD (ORD_SEQ) · 통계 최신SELECT ORD_SEQ, CUS_ID, ORD_DT, ORD_AMT
FROM T_ORD
WHERE CASE WHEN TO_CHAR(ORD_DT, 'HH24') >= '18'
THEN TRUNC(ORD_DT) + 1
ELSE TRUNC(ORD_DT)
END = TO_DATE(:v_ship_dt, 'YYYYMMDD')
ORDER BY ORD_DT
------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | Used-Mem |
------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 139 |00:00:00.02 | 896 | |
| 1 | SORT ORDER BY | | 1 | 1000 | 139 |00:00:00.02 | 896 |18432 (0)|
|* 2 | TABLE ACCESS FULL| T_ORD | 1 | 1000 | 139 |00:00:00.02 | 896 | |
------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - filter(CASE WHEN TO_CHAR(INTERNAL_FUNCTION("ORD_DT"),'HH24')>='18' THEN
TRUNC(INTERNAL_FUNCTION("ORD_DT"))+1 ELSE TRUNC(INTERNAL_FUNCTION("ORD_DT")) END
=TO_DATE(:V_SHIP_DT,'YYYYMMDD'))
ORD_DT에 대한 범위 조건 하나로 SQL을 고치시오. 18시 정각에 들어온 주문이 어느 출고일에 들어가는지 경계를 따져 설명하시오.