본문 바로가기

프로그래밍/Database

Oracle_MERGE INTO 문

반응형

MERGE INTO 문

데이터를 처리할 때 데이터의 존재 여부를 SELECT하고 해당 값이 없으면 INSERT 처리, 있으면 UPDATE 처리함

 

MERGE INTO 문을 사용하면 데이터의 존재 여부를 확인하는 쿼리 (SELECT), 데이터를 삽입하는 쿼리 (INSERT), 데이터를 수정하는 쿼리 (UPDATE)를 한 번에 처리할 수 있다. 

 

 

MERGE INTO 문 사용 예시

    MERGE INTO EXAMPLE_A A                     -- UPDATE 또는 INSERT할 테이블|뷰          
	 USING EXAMPLE_B B                     -- 있는지 없는지 조회할 대상이 되는 테이블|뷰|서브쿼리 
            ON (A.EXAMPLE_NO = B.EXAMPLE_NO) 
          WHEN MATCHED THEN                    -- 조건이 일치하는 경우 
    UPDATE SET A.EXAMPLE_EXNO = B.EXAMPLE_EXNO
             , A.EXAMPLE_EXNO2 = B.EXAMPLE_EXNO2
      WHEN NOT MATCHED THEN                    -- 조건이 불일치하는 경우
  	INSERT (A.EXAMPLE_NO, A.EXAMPLE_EXNO, A.EXAMPLE_EXNO2)
        VALUES (B.EXAMPLE_NO, B.EXAMPLE_EXNO, B.EXAMPLE_EXNO2);

단, ON 조건절에 사용할 컬럼을 업데이트하면 오류가 발생함 !

 

 

1. 단일 테이블 사용 예시 (DUAL)

    MERGE INTO EXAMPLE_A A                     -- UPDATE 또는 INSERT할 테이블|뷰          
	 USING DUAL
            ON (A.EXAMPLE_NO = 1) 
          WHEN MATCHED THEN                    -- 조건이 일치하는 경우 
    UPDATE SET A.EXAMPLE_EXNO = 1
      WHEN NOT MATCHED THEN                    -- 조건이 불일치하는 경우
  	INSERT (A.EXAMPLE_NO, A.EXAMPLE_EXNO, A.EXAMPLE_EXNO2)
        VALUES (1, 1, 1);

단일 테이블에 작업을 할 때, USING 절에 테이블 대신 DUAL을 사용함 

 

 

2. 두 테이블 조인 사용 예시 

    MERGE INTO EXAMPLE_A A                     -- UPDATE 또는 INSERT할 테이블|뷰          
	 USING EXAMPLE_B B                     -- 있는지 없는지 조회할 대상이 되는 테이블|뷰|서브쿼리 
            ON (A.EXAMPLE_NO = B.EXAMPLE_NO) 
          WHEN MATCHED THEN                    -- 조건이 일치하는 경우 
    UPDATE SET A.EXAMPLE_EXNO = B.EXAMPLE_EXNO
             , A.EXAMPLE_EXNO2 = B.EXAMPLE_EXNO2
      WHEN NOT MATCHED THEN                    -- 조건이 불일치하는 경우
  	INSERT (A.EXAMPLE_NO, A.EXAMPLE_EXNO, A.EXAMPLE_EXNO2)
        VALUES (B.EXAMPLE_NO, B.EXAMPLE_EXNO, B.EXAMPLE_EXNO2);

EXAMPLE_B 테이블이 EXAMPLE_A 테이블에 존재하는 경우 EXAMPLE_B 테이블로 UPDATE, INSERT함

 

 

3. 서브 쿼리 사용 예시

    MERGE INTO EXAMPLE_A A                     -- UPDATE 또는 INSERT할 테이블|뷰          
	 USING (
        SELECT B.EXAMPLE_NAME
          FROM EXAMPLE_C AS C
    INNER JOIN EXAMPLE_B AS B
            ON A.EXAMPLE_NO = B.EXAMPLE_NO
          ) AS EX
            ON (A.EXAMPLE_NO = EX.EXAMPLE_NO) 
          WHEN MATCHED THEN                    -- 조건이 일치하는 경우 
    UPDATE SET A.EXAMPLE_EXNO = EX.EXAMPLE_EXNO
             , A.EXAMPLE_EXNO2 = EX.EXAMPLE_EXNO2
      WHEN NOT MATCHED THEN                    -- 조건이 불일치하는 경우
  	INSERT (A.EXAMPLE_NAME)
        VALUES (EX.EXAMPLE_NAME);

USING 절의 서브쿼리 결과와 조인하여 사용함

 

반응형

'프로그래밍 > Database' 카테고리의 다른 글

Oracle_WHERE 1=1  (0) 2023.08.29
MySQL_JAVA DB 연결 (select, delete)  (0) 2023.03.14
MySQL_GROUP BY절  (0) 2023.03.10
MySQL_N : M 관계  (0) 2023.03.10
MySQL_MySQL FUNCTION  (0) 2023.03.10