Database/Oracle
[Oracle] Merge into 2가지 방법
태주니아빠
2023. 9. 29. 05:48
반응형
Oracle의 MERGE INTO 문은 두 개의 테이블 간 데이터를 병합하는 데 사용되는 SQL 문장입니다. 주로 두 가지 상황에서 사용됩니다:
데이터 삽입 또는 업데이트: MERGE INTO 문은 대상 테이블에 데이터가 이미 존재하는 경우 해당 데이터를 업데이트하고, 데이터가 존재하지 않으면 새 데이터를 삽입합니다.
데이터 삭제: 더 이상 소스 테이블에 존재하지 않는 데이터를 대상 테이블에서 삭제합니다.
MERGE INTO 문의 일반적인 구문은 다음과 같습니다:
-- 머지 방법 1 내 자신을 대상으로 삼는경우
/* USING DUAL */
MERGE INTO TB_NOTICE
USING DUAL
ON (
NOTICE_SQ = #{noticeSq}
)
WHEN MATCHED THEN
UPDATE
SET NOTICE_TYPE = #{noticeType}
, NOTICE_TITLE = #{noticeTitle}
, NOTICE_CONTENT = #{noticeContent}
, NOTICE_STDT = TO_DATE(#{startDate}, 'YYYY-MM-DD')
, NOTICE_EDDT = TO_DATE(#{endDate}, 'YYYY-MM-DD')
, URGENT_YN = NVL(#{readCnt}, '0')
, USE_YN = #{useYn}
, UPD_ID = #{updId}
, UPD_DT = SYSDATE
WHEN NOT MATCHED THEN
INSERT (
NOTICE_SQ
, NOTICE_TYPE
, NOTICE_TITLE
, NOTICE_STDT
, NOTICE_EDDT
, NOTICE_CONTENT
, URGENT_YN
, USE_YN
, READ_CNT
, REG_ID
, REG_DT
, UPD_ID
, UPD_DT
)
VALUES (
#{noticeSq}
, #{noticeType}
, #{noticeTitle}
, TO_DATE(#{startDate}, 'YYYY-MM-DD')
, TO_DATE(#{endDate}, 'YYYY-MM-DD')
, #{noticeContent}
, NVL(#{urgentYn},'N')
, #{useYn}
, NVL(#{readCnt}, '0')
, #{regId}
, SYSDATE
, #{updId}
, SYSDATE
)
-- 특정테이블을 대상으로 삼는경우
/* USING TABLE */
MERGE INTO TB_STOCK_LINK_BASE T
USING (
SELECT #{delvLocCd} AS DELV_LOC_CD
, #{brandCd} AS BRAND_CD
, #{formalGb} AS FORMAL_GB
, NVL2(#{stockLinkYn},#{stockLinkYn},'N') AS STOCK_LINK_YN
, NVL2(#{delvLinkYn},#{delvLinkYn},'N') AS DELV_LINK_YN
, #{regId} AS REG_ID
, SYSDATE AS REG_DT
, #{updId} AS UPD_ID
, SYSDATE AS UPD_DT
FROM DUAL
) S
ON (
T.DELV_LOC_CD = S.DELV_LOC_CD
AND T.BRAND_CD = S.BRAND_CD
AND T.FORMAL_GB = S.FORMAL_GB
)
WHEN MATCHED THEN
UPDATE
SET STOCK_LINK_YN = S.STOCK_LINK_YN
, DELV_LINK_YN = S.DELV_LINK_YN
, UPD_ID = S.UPD_ID
, UPD_DT = S.UPD_DT
WHEN NOT MATCHED THEN
INSERT (
DELV_LOC_CD
, BRAND_CD
, FORMAL_GB
, STOCK_LINK_YN
, DELV_LINK_YN
, REG_ID
, REG_DT
, UPD_ID
, UPD_DT
)
VALUES (
S.DELV_LOC_CD
, S.BRAND_CD
, S.FORMAL_GB
, S.STOCK_LINK_YN
, S.DELV_LINK_YN
, S.REG_ID
, S.REG_DT
, S.UPD_ID
, S.UPD_DT
)
MERGE INTO 문은 데이터 일치 및 불일치 경우에 대한 작업을 정의하는 강력한 SQL 문장입니다. 이를 사용하여 데이터 동기화, 업데이트 및 삽입을 효과적으로 수행할 수 있습니다.
반응형