반응형

 

*Merge문 활용

- MERGE INTO문을 이용하면 하나의 SQL 안에서 INSERT, UPDATE, DELETE 작업을 한번에 처리할 수 있다. 이 기능은 Oracle 9i부터 제공되기 시작했고, DELETE 작업까지 처리할 수 있게 된 것은 10g부터다. SQL Server도 2008 버전부터 이 문장을 지원하기 시작했다.

 - MERGE INTO는 기간계 시스템으로부터 읽어온 신규 및 변경분 데이터를 DW 시스템에 반영하고자 할 때 사용하면 효과적이다. 아래는 MERGE문을 이용해 INSERT, UPDATE를 동시에 처리하는 예다.

 

 

MERGE INTO 고객 T USING 고객변경분 S ON (T.고객번호 = S.고객번호)

 WHEN MATCHED THEN UPDATE

SET T.고객번호 = S.고객번호, T.고객명 =  S.고객명, T.이메일 = S.이메일

WHEN NOT MATCHED THEN INSERT

(고객번호, 고객명, 이메일, 전화번호, 거주지역, 주소, 등록일시) VALUES

(S.고객번호, S.고객명, S.이메일, S.전화번호, S.거주지역, S.주소, S.등록일시)

;

 

*Oracle 10g부터는 아래와 같이 UPDATE와 INSERT를 선택적으로 처리할 수 있다.

 

MERGE INTO 고객 T USING 고객변경분 S ON (T.고객번호 = S.고객번호)

WHEN MATCHED THEN UPDATE

SET T.고객번호 = S.고객번호, T.고객명 = S.고객명, T.이메일 = S.이메일

 ;

 

MERGE INTO 고객 T USING 고객변경분 S ON (T.고객번호 = S.고객번호)

WHEN NOT MATCHED THEN INSERT

(고객번호, 고객명, 이메일, 전화번호, 거주지역, 주소, 등록일시) VALUES

(S.고객번호, S.고객명, S.이메일, S.전화번호, S.거주지역, S.주소, S.등록일시)

;

 


---------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------

 

-- KSEI ACNT NO AND SID UPDATE
MERGE INTO A0T100M D
     USING TMP_ACT@DEV3 S
        ON (
                 (REPLACE(D.KSEI_ACNT_NO, '-', '') = S.KSEI_ACNT_NO)
             AND (D.ACNT_STAT_SECT <> '99')
             AND (S.SSID IS NOT NULL)
           )
      WHEN MATCHED THEN UPDATE
       SET D.NKSEI_ACNT_NO = S.SSID
         , D.SID           = S.SID
         , D.TXRT_CD       = S.TAX1
;

---------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------

 

반응형