SQL MERGE문
MERGE
-
MERGE문 : 오라클 9i 부터 사용가능. MERGE문안에서 사용하는 DELETE문은 10g에서부터 사용가능
-
MERGE문은 조건을 비교해서 테이블에 해당 조건에 맞는 데이터가 없으면 INSERT,
있으면 UPDATE를 수행하는 문장이다.
-
특정 조건에 따라 어떤 때는 INSERT를, 또 다른 경우에는 UPDATE문을 수행해야 할 때,
과거에는 해당 조건을 처리하는 로직을 별도로 작성해야 했지만,
MERGE문이 나온 덕분에 이제 한 문장으로 처리할 수 있게 되었다.
MERGE
INTO [스키마.]테이블명
USING (update나 insert될 데이터 원천)
ON (update될 조건)
WHEN MATCHED THEN
SET 컬럼1 = 값1, 컬럼2 = 값2, ...
WHERE update 조건
DELETE WHERE update_delete 조건
WHEN NOT MATCHED THEN
INSERT (컬럼1, 컬럼2, ...) VALUES (값1, 값2,...)
WHERE insert 조건;
예시
-- 테이블 구조만 복사 (데이터 제외됨)
CREATE TABLE EMP
AS
SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME, DEPARTMENT_ID FROM EMPLOYEES WHERE 0 = 1;
SELECT * FROM EMP;
SELECT * FROM EMPLOYEES ORDER BY EMPLOYEE_ID ASC; -- 206
SELECT * FROM EMP WHERE EMPLOYEE_ID = 207;
-- EMP 테이블 구조만 복사해서 장바구니 같은 역할
-- 단일 테이블 사용법(DUAL) : 2번
MERGE
INTO EMP A
USING DUAL
ON (A.EMPLOYEE_ID = 207)
WHEN MATCHED THEN
UPDATE
SET A.DEPARTMENT_ID = 999
WHEN NOT MATCHED THEN
INSERT(A.EMPLOYEE_ID, A.FIRST_NAME, A.LAST_NAME, A.DEPARTMENT_ID)
VALUES(207, 'SCOTT', 'KING', 20);
댓글남기기