merge into는 

DB 테이블을 다룰 때, 특정 조건의 데이터가 존재하는 경우에는 해당 row를 원하는 값으로 update하고,

없는 경우에는 새로운 데이터를 insert해야 하는 경우에 사용한다. 



MERGE문


MERGE INTO 테이블명

USING ( update나 insert될 데이터 원천, 하나의 테이블만 이용한다면 FROM DUAL사용 )

ON (UPDATE될 조건, 쿼리의 WHERE이라고 봐도 무방함)

WHEN MATCHED THEN ( ON에서 조건에 해당하면 실행 될 문 )

UPDATE SET 컬럼1 = 값1 ( UPDATE문 실행)

WHEN NOT MATCHED THEN ( ON에서 조건에 해당하지 않으면 실행 될 문 )

INSERT ( 컬럼 LIST ) VALUE ( VALUE );



!!!!!! 가장 중요한것. 이거때문에 하루 버렸는데,Point!!!!


using ( select 할때 )에서 항시 해당 Table 의 PK를 전체를 변수로 받아야 합니다.  null 유의 )



예) 회사에서 사용한 것 (테이블명,컬럼명 변경함)


MERGE INTO MAP_M A

      USING ( SELECT :컬럼0 AS 컬럼0         //컬럼0~3은 모두 MAP_M 이라는 테이블의 KEY값.

                   , :컬럼1 AS 컬럼1

                   , :컬럼2 AS 컬럼2

                   , :컬럼3 AS 컬럼3

                FROM DUAL ) B // FROM DUAL은 테이블을 1개만 쓸때!! 

      ON ( A.컬럼0     = B.컬럼0     AND

           A.컬럼1 = B.컬럼1 AND

           A.컬럼2 = B.컬럼2 AND

           A.컬럼3 = B.컬럼3

          )

      WHEN MATCHED THEN

           UPDATE 

              SET A.컬럼4   = 'Y'

                , A.컬럼5   = :받아올 값

                , A.컬럼6   = :받아올 값

      WHEN NOT MATCHED THEN

            INSERT ( 컬럼1,   컬럼2,    컬럼3,    컬럼4,    컬럼5,    컬럼6 )

           VALUES (:컬럼1,  :컬럼2,    :컬럼3,    :컬럼4,    :컬럼5,   :컬럼6 )


이런식으로 사용하면 끝 !!!! 


그리고 Oracle 10g 이후에는 When matched,, when not matched 이하의 update,insert 구문에도 where을 사용할 수 있습니다 !!!! 



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

mybits 에러  (0) 2018.07.13
이런방식의 쿼리. sort_sql에서 max값 구할때  (0) 2017.12.06
데이터 변형  (0) 2017.10.17
LAPD,RAPD 사용법  (0) 2017.10.17
UNION, UNION ALL  (0) 2017.06.16

+ Recent posts