오라클3 [ORACLE] 동일 상품정보 제거하기 미처 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 FR.. 2022. 12. 14. [ORACLE] 로그인 정책 적용 흔히들 로그인을 만들때, 5회 이상 틀리면 회원을 잠그고, 패스워드 변경 처리하도록 한다. 그에 대한 로직을 적용한 테이블 구조와 쿼리는 다음과 같다. /* n회차 틀릴 경우 저장 */ UPDATE T_USER SET PSWD_FAIL_CNT = 0 WHERE LOGIN_ID = 'TEST1234'; COMMIT; 또한 마지막 패스워드 변경일을 관리하여, 1달에 한 번씩 패드워드를 변경할 수 있게 끔 해줘야 한다. /*마지막 수정일 변경*/ UPDATE T_USER SET LS_PSWD_CHG_DTM = SYSDATE WHERE LOGIN_ID = 'TEST1234'; COMMIT; 끝으로 패스워드를 초기화 해줘야 할 때가 있다. 대부분은 회사 내부 디폴드 값이 있을 것이다. 컬럼의 암호화 방식에 맞춰 .. 2022. 12. 13. [ORACLE] 내 맘대로 소팅 (커스텀 정렬) SELECT * FROM TB_FRUIT ORDER BY DECODE(FRUIT, 'APPLE', 1, 'GRAPES', 2, 'BANANA', 3, 99) ASC; 이번에 개발하다가 원치않게 위와 같은 소팅이 필요할 때가 있었다. DECODE함수를 통한 변환으로 소팅 기반 숫자를 만든다. 이때 범주에 들지 않는 것은 모두 99 로 변환한다. ORDER BY에 DECODE 함수를 사용하는 것은 속도면에서 좋지는 않을 것 같지만, 일시적으로 사용되는 쿼리에는 무방할 것으로 보인다. ※ 위 쿼리들은 현재 Live 에서 사용하는 것을 변형한 것임을 밝혀둔다. 2022. 12. 12. 이전 1 다음 반응형