오라클 merge 함수란 어떠한 조건에 만족하거나 만족하지 않을 경우에 따라 특정 CRUD문을 수행하는 어떻게 보면 하나의 IF문을 사용하는 쿼리입니다.
데이터를 가공하는 도중에 해당되는 값이 이미 DB상에 존재할 경우가 있는데 이럴 경우 그 해당 값을 다시 DB에 넣으면 데이터 중복이일어날 수 있습니다. 이때 merge 함수 문을 써서 해당 값이 있으면 UPDATE를 하고 없으면 INSERT를 하는 방법으로 사용하게 됩니다.
한번 오라클에서 사용하는 예제를 통해 merge 함수의 사용방법을 알아보도록 하겠습니다.
1. 예제
오라클 설치시 기본적으로 사용하는 EMP 테이블을 사용할 것입니다.
다음의 구문 ‘CREATE TABLE EXAM AS SELECT * FROM EMP’ 을 통해 EMP 테이블과 동인할 EXAM 테이블을 생성해 줍니다.
MERGE INTO EXAM E1 USING (SELECT * FROM EMP WHERE ENAME='SMITH') E2 ON (E1.EMPNO = E2.EMPNO) WHEN MATCHED THEN UPDATE SET E1.JOB ='CEO' WHEN NOT MATCHED THEN INSERT (E1.EMPNO, E1.ENAME) VALUE(0000, 'ADMIN')
merge 쿼리는 다음과 같습니다.
INTO절은 일단 UPDATE나 INSERT가 수행될 대상 테이블을 지정합니다.
USING은 대상입니다. IF 절이라고 생각하시면 됩니다.
ON은 대상과 적용의 연결고리 정도 되겠습니다.
정리하자면 ‘USING에서 수행된 쿼리의 결과값이 EXAM에 테이블에 있을 경우는 UPDATE 없을 경우는 ADMIN이 이름으로 들어간 값을 EXAM테이블에 넣는다’ 입니다.
2. 결과
위와 같이 EXAM 테이블에 이미 해당 값이 있기 때문에 SMITH의 JOB이 CEO로 변경되었습니다.
그럼 이번에는 SMITH를 지워 조건절이 만족하지 않은 경우를 테스트 해보겠습니다.
다음과 같이 조건이 만족하지 않아 INSERT절이 수행되었고 ADMIN이라는 이름의 직원이 추가되었습니다.
이렇게 오라클 merge 사용방법에 대해서 알아보았는데 조건에 따라 insert와 update 구문으로 분기되어 작동되니 데이터의 일관성이 유지되어야 하는 곳에 사용하면 더 유용하고 효율적으로 작업을 할 수 있습니다.
답글 남기기