테마
본사 전산실의 「상품 코드 오류 점검」은 매일 아침 어제 판매상품 가운데 상품 마스터(CF01)에 없는 상품번호로 찍힌 줄을 찾는다. POS 메뉴 동기화가 늦은 날 마스터에 없는 번호가 찍히는 일이 있어서 만든 점검이다. 지난주 점검표 양식에서 상품명 칸을 빼면서 SQL도 정리했는데, 그 뒤로 날마다 700줄 넘게 '코드 오류'로 나온다. 확인해 보니 아메리카노와 카페라테처럼 마스터에 멀쩡히 있는 매장 제조 음료의 줄이었다.
예전 점검표는 거래처 이름을 함께 보여 줘서 조인에 PTNR_NO를 쓰고 있었고, 정리하면서 IS NULL 조건도 그 컬럼에 걸었다.
CF11 판매상품: 1,096,708행 · 8,204블록 · CF11_PK (SLE_NO, ITM_NO): BLEVEL 2 · SLE_NO는 'YYYYMMDD-NNNN'이라 앞 8자리가 판매일CF01 상품: 109행 · 5블록 · CF01_PK (ITM_NO) · 매장 제조 상품 41개는 거래처가 없어 PTNR_NO가 NULL이다:v_from = '20231218', :v_to = '20231219'SELECT d.SLE_NO, d.ITM_NO, d.SLE_QTY
FROM CF11 d
LEFT OUTER JOIN CF01 p
ON p.ITM_NO = d.ITM_NO
WHERE d.SLE_NO >= :v_from
AND d.SLE_NO < :v_to
AND p.PTNR_NO IS NULL
ORDER BY d.SLE_NO, d.ITM_NO
---------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |
---------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 712 |00:00:00.01 | 26 |
| 1 | SORT ORDER BY | | 1 | 560 | 712 |00:00:00.01 | 26 |
|* 2 | FILTER | | 1 | | 712 |00:00:00.01 | 26 |
|* 3 | HASH JOIN RIGHT OUTER | | 1 | 1490 | 1512 |00:00:00.01 | 26 |
| 4 | TABLE ACCESS FULL | CF01 | 1 | 109 | 109 |00:00:00.01 | 5 |
| 5 | TABLE ACCESS BY INDEX ROWID BATCHED| CF11 | 1 | 1490 | 1512 |00:00:00.01 | 21 |
|* 6 | INDEX RANGE SCAN | CF11_PK | 1 | 1490 | 1512 |00:00:00.01 | 8 |
---------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - filter("P"."PTNR_NO" IS NULL)
3 - access("P"."ITM_NO"="D"."ITM_NO")
6 - access("D"."SLE_NO">=:V_FROM AND "D"."SLE_NO"<:V_TO)