반응형
오라클의 Merge문은 앞서 배운
Insert문과 Update문을 한꺼번에 수행할 수 있는 기능입니다.
기본 로직은 어떠한 값을 특정 테이블에 저장하려 할 때
저장하려는 값이 존재하지 않으면 Insert , 존재하면 Update를
수행하게 하는 역할을 합니다.
MERGE INTO 구조
MERGE INTO [테이블A]
USING [테이블B]
ON ([테이블A].[컬럼1] = [테이블B].[컬럼1])
WHEN MATCHED THEN
UPDATE
SET [테이블A].[컬럼] = [값1]
WHEN NOT MATCHED THEN
INSERT ([테이블A].[컬럼1], [테이블A].[컬럼2]) VALUE([값1], [값2])
기본 구조는 위와 같습니다.
기능 | 역할 |
MERGE INTO | Insert, Update 문이 수행될 테이블A |
USING | MERGE INTO에 해당된 테이블과 비교할 테이블B |
ON | 테이블A와 테이블B에 매칭할 컬럼 |
WHEN MATCHED THEN | ON절에 해당 하는 데이터가 이미 있을 경우 |
WHEN NOT MATCHED THEN | ON절에 해당 하는 데이터가 없을 경우 |
Merge문의 구조는 위와 같은 형태를 띠고 있습니다.
예제 소스
EMP 테이블을 예제로 사용할 예정이며,
EMP_TARGER 테이블을 새로 생성하여 Merge 해 보겠습니다.
EMP_TARGET 테이블에는 연봉이 2000 이하의 데이터가 있습니다.
이 테이블에는 EMP테이블에 있는 사원도 없는 사원도 있습니다.
그래서 MERGE문을 수행해서 EMP테이블에 존재하는 사원이면
연봉을 +1000 더하고 없으면 EMP테이블에 저장해 보겠습니다.
EMP테이블과 EMP_TARGET 테이블 조회 모습입니다.
MERGE INTO EMP EP
USING EMP_TARGET ET
ON (EP.EMPNO = ET.EMPNO)
WHEN MATCHED THEN
UPDATE SET EP.SAL = EP.SAL + 1000
WHEN NOT MATCHED THEN
INSERT (EMPNO, ENAME, JOB, MGR,
HIREDATE, SAL, COMM, DEPTNO)
VALUES (ET.EMPNO, ET.ENAME, ET.JOB, ET.MGR,
ET.HIREDATE, ET.SAL, ET.COMM, ET.DEPTNO);
MERGE문을 수행한 모습입니다.
EMP_TARGET의 명단이 EMP테이블에 존재하면 연봉이 올랐으며
없으면 EMP테이블에 저장된 모습입니다.
MERGE 문은 JAVA의 IF - ELSE와 같은 효과를 누릴 수 있는데요.
INSERT와 UPDATE를 동시에 쓸 수 있으므로 소스의 간결함이 필요할 때
쓰시면 유용하게 사용할 수 있습니다.
반응형
'DB > Oracle' 카테고리의 다른 글
[Oracle] 사용자 계정 생성 및 접속 권한 부여 (0) | 2023.01.29 |
---|---|
[Oracle] ORA-12505 Listener refused the connection.. 에러 (0) | 2022.11.27 |
[Oracle] Delete 문의 활용, 데이터 삭제 Truncate 차이 (0) | 2022.11.23 |
[Oracle] Update 문의 활용, 데이터 수정 갱신 (0) | 2022.11.22 |
[Oracle] Insert 문의 활용, 데이터 입력 저장 (0) | 2022.11.21 |