MERGE INTO 를 처음 사용해보았기때문에 실무와 관련된 내용을 바탕으로 쿼리문을 작성해보았습니다.
우선 예제로 두 개의 테이블을 사용합니다.
ASD 테이블에는 상품명, 상품가격, 상품코드 컬럼이 있으며,
ZXC 테이블에는 ASD 테이블의 내용을 그대로 사용하는 상품명, 상품가격, 상품코드,
그리고 별도로 입력하는 제품코드, 최초입력일, 최초입력자아이디, 수정일, 수정자아이디 컬럼이 있습니다.
ASD 테이블:
상품명
상품가격
상품코드
ZXC 테이블:
상품명
상품가격
상품코드
제품코드
최초입력일
최초입력자아이디
수정일
수정자아이디
문제는 다음과 같습니다.
ZXC 테이블에 최초로 상품 데이터를 입력할 때는 최초입력일에 오늘 날짜를,
최초입력자아이디에 사용자의 아이디를 입력합니다.
그리고 데이터가 이미 존재하는 경우에는 수정일과 수정자의 아이디를 갱신하여 업데이트를 합니다.
이를 해결하기 위해 Oracle에서 제공하는 MERGE INTO 문을 사용하면
간편하게 데이터를 삽입하고 갱신할 수 있습니다.
MERGE INTO 문 예제
MERGE INTO ZXC Z
USING ASD A
ON (Z.상품코드 = A.상품코드)
WHEN MATCHED THEN
UPDATE SET Z.상품명 = A.상품명,
Z.상품가격 = A.상품가격,
Z.수정일 = SYSDATE,
Z.수정자아이디 = '수정하는 사용자 아이디'
WHEN NOT MATCHED THEN
INSERT (Z.상품코드, Z.상품명, Z.상품가격, Z.최초입력일, Z.최초입력자아이디)
VALUES (A.상품코드, A.상품명, A.상품가격, SYSDATE, '최초 입력하는 사용자 아이디');
위의 쿼리문은 ZXC 테이블과 ASD 테이블을 조인하여 데이터를 비교하고,
매칭되는 레코드가 있는 경우 해당 레코드를 업데이트하며 수정일과 수정자의 아이디를 갱신합니다.
매칭되는 레코드가 없는 경우에는 ASD 테이블의 값을 새로 삽입하면서
최초 입력일과 최초 입력자의 아이디를 입력합니다.
이렇게 MERGE INTO 문을 활용하면 효율적으로 데이터를 삽입하고 갱신할 수 있습니다.
데이터 중복을 방지하고, 갱신 작업을 간편하게 처리할 수 있는 이러한 기능을 잘 활용하면
데이터베이스 관리가 더욱 편리해집니다.