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);

태그:

카테고리:

업데이트:

댓글남기기