[sql] MERGE INTO

*기존 데이터가 존재하다면 UPDATE(or DELETE)
 기존 데이터가 존재하지 않다면 INSERT을 수행할 수 있는 쿼리 명령문 이다.

*MERGE INTO 쿼리 명령문을 사용하는 기본 틀은 다음과 같다.
 MERGE INTO [목적지 테이블]
 USING [조건을 확인하는 테이블]
     ON [조건]
 WHEN MATCHED THEN
 ["[조건을 확인하는 테이블 및 조건]"에 MATCH되었을 때 수행하는 쿼리]
 WHEN NOT MATCHED THEN
 ["[조건을 확인하는 테이블 및 조건]"]에 MATCH되지 않았을 때 수행하는 쿼리]

*MERGE INTO 쿼리 명령문의 사용 예제 
        MERGE INTO XRMFT_SHIPTO_MST A
        USING DUAL
        --*만약 하나의 테이블에서 MERGE INTO을 사용하였을때에는
           USING에 "DUAL"테이블을 사용한다.
              ON ( A.column= @value)
        WHEN MATCHED THEN
                UPDATE SET A.column= TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS')
                         , A.column= -2
                         , A.column= @value
                         , A.column= @value
                         , A.column= @value
                         , A.column= @value
                         , A.column= @value
                         , A.column= @value
                         , A.column= @value
                         , A.column= @value
                         , A.column= @value
                         , A.column= @value
                         , A.column= @value
        WHEN NOT MATCHED THEN
                 INSERT (
                         column
                       , column
                       , column
                       , column
                       , column
                       , column
                       , column
                       , column
                       , column
                       , column
                       , column
                       , column
                       , column
                       , column
                       , column
                       , column
                        )
                        VALUES
                        (
                         @value
                       , @value
                       , @value
                       , @value
                       , @value
                       , @value
                       , @value
                       , @value
                       , @value
                       , @value
                       , @value
                       , @value
                       , -2
                       , TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS')
                       , -2
                       , TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS')
                        );

*WHEN MATHCED THEN / WHEN NOT MATCHED THEN 구문은 무조건
 (동시에)존재하는 걸까?
 NO! 그렇지않다, 사용 의도에 따라 하나만 존재하여도 된다.
        MERGE INTO IF_XRMFT_SHIPTO_MST_R B
        USING DUAL
              ON  (
                          B.column= @value
                          AND TO_CHAR(B.column, 'YYYYMMDD') = 
                                 TO_CHAR(SYSDATE, 'YYYYMMDD')
                     )
        WHEN MATCHED THEN
                UPDATE SET B.column= 'Y';

//기본적인 MERGE 사용법은 위와 같다..
//https://thebook.io/006696/part01/ch03/04/


MERGE INTO TABLE_NAME
USING DUAL
ON ( COL = '...' )
WHEN MATCHED THEN
 UPDATE SET COL_ = SYSDATE
WHEN NOT MATCHED THEN
 INSERT( COL1, COL2 )
 VALUES ( 'A','B');
 

댓글

이 블로그의 인기 게시물

[sql] 테이블 생성