Merge문 활용(고급 SQL 튜닝) - SQL전문가 가이드 p.714~p.715
개발 및 관리/Oracle 9i, 10g, 11g, 12c, 19c 2012. 10. 26. 18:03
*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
;
---------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------
'개발 및 관리 > Oracle 9i, 10g, 11g, 12c, 19c' 카테고리의 다른 글
배치 프로그램 튜닝 요약(고급 SQL 튜닝) - SQL전문가 가이드 p.727 (0) | 2012.10.26 |
---|---|
인덱스 파티셔닝 가이드(고급 SQL 튜닝) - SQL전문가 가이드 p.722~p.723 (0) | 2012.10.26 |
소트 영역 크기 조정(고급 SQL 튜닝) - SQL전문가 가이드 p.706~p.707 (0) | 2012.10.26 |
소트 영역을 적게 사용하도록 SQL 작성 - SQL전문가 가이드 p.695~p.706 (0) | 2012.10.26 |
소트 튜닝(고급 SQL 튜닝) - SQL전문가 가이드 p.689~p.693 (0) | 2012.10.26 |