ORACLE MERGE INTO를 이용한 다중 업데이트
ORACLE SQL
문제점 😅
오랜만에 글을 남긴다. 이전 개발자가 INSERT 쿼리를 잘못 작성하여 두 컬럼의 데이터가 서로 뒤바뀌어 저장되었다. 한 방에 쿼리로 하나의 테이블 내의 여러건을 업데이트 해야하는데, UPDATE 쿼리를 작성하다가 이건 아닌것 같더라.
해결책 😏
MERGE INTO
구문을 사용하자. 한 테이블 내의 두 컬럼의 데이터를 서로 바꿔서 업데이트만 하면 되었다.
-- 최종 데이터 보정 쿼리 : 284건
MERGE INTO TB_COM_UNI A
USING (SELECT UNI_ID
,UNI_MODEL_CODE AS REAL_UNI_CODE
,UNI_CODE AS REAL_UNI_MODEL_CODE
FROM TB_COM_UNI) B
ON (A.UNI_ID = B.UNI_ID)
WHEN MATCHED THEN
UPDATE SET A.UNI_CODE = B.REAL_UNI_CODE
,A.UNI_MODEL_CODE = B.REAL_UNI_MODEL_CODE
;
테이블의 컬럼명 자체를 바꿔도 되긴하지만, 어차피 키값은 동일하므로, 서브쿼리로 테이블B의 키값을 비교 후 정상 데이터로 업데이트 했다. MERGE INTO
구문의 핵심 기능은 데이터 여부에 따라 INSERT 또는 UPDATE 처리가 가능하다는 점이므로, 자주 사용하자.
마무리 😎
보정 완료 후, 관련 소스들도 수정했다. 이전 개발자는 왜 그랬을까… 아무튼 MERGE INTO
구문을 여러가지 상황에 맞게 사용하는 방법을 알아두자.