728x90
미처 UNIQUE INDEX를 잡아놓지 않은 덕분인지, 개발자가 같은 상품을 여러번 등록하는 실수를 했다. 그리고 DB는 그 모든 내용을 저장해 주고 있었다. 집계수량이 어긋나서 확인해 보니 중복 상품 다량 발견. (일단 개발계라 고치면 된다.)
따라서 중복되는 상품을 제거해 줘야 했고, PARTITION BY를 활용하여 다음의 쿼리로 제거 했다. 처음에 등록한 것 빼고는 모두 삭제처리하는 쿼리다.
DELETE FROM TB_PRD
WHERE PRD_REQ_NO IN (
SELECT PRD_REQ_NO FROM (
SELECT ROW_NUMBER() OVER(PARTITION BY ETPS_CD, PRD_ID ORDER BY ETPS_CD, PRD_ID, MDF_DTM ) RN
,PRD_REQ_NO
FROM TB_PRD
)
WHERE RN > 1
)
;
늦게나마 일단 UNIQUE INDEX를 걸어둬서 이런 사고를 미연에 방지해야겠다.
CREATE UNIQUE INDEX IDX_IF_T_PRD_M ON T_PRD_M (PRD_ID, ETPS_CD)
TABLESPACE PTNR_DATA;
※ 위 쿼리들은 현재 Live 에서 사용하는 것을 변형한 것임을 밝혀둔다.
728x90
'PROGRAMMING > Database' 카테고리의 다른 글
[ORACLE] 요일별 생산 수량 써머리 표출 (2) | 2022.12.20 |
---|---|
[ORACLE] 로그인 정책 적용 (10) | 2022.12.13 |
[ORACLE] 내 맘대로 소팅 (커스텀 정렬) (10) | 2022.12.12 |
[오라클] 주문배송 집계정보 처리 (19) | 2022.12.07 |
[ORACLE] 이번달 1일, 마지막일 구하기 (8) | 2022.11.16 |
댓글