본문 바로가기
반응형

 

 

 

 

  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 문장입니다. 이를 사용하여 데이터 동기화, 업데이트 및 삽입을 효과적으로 수행할 수 있습니다.

반응형

'Database > Oracle' 카테고리의 다른 글

[Oracle] 익명 프로시져  (0) 2023.09.27