자기 개발/Oracle
오라클(ORACLE) MERGE INTO (UPDATE , INSERT)
SeungHwa
2014. 5. 30. 15:30
프로젝트 할때 자주 데이터 삽입 과 데이터 수정을 자주 하게 됩니다.
그럴때 없는 데이터 같은경우는 INSERT(삽입)을 통해 데이터를 넣어주고 , 있을 경우에는
데이터 변경이 필요할때 UDPATE(수정)를 통해 작업을 해주는데 조건문을 통해 성립 할경우 와 안할경우
일반적인 IF문을 사용할때는 아래와 같이 써주게 됩니다.
------------------------------------------------------------------------------------------------- 하지만 MERGE INTO 문을 사용하게 되면 아래 와 같이 조건문으로 처리를 안해도 한 문장에 쿼리로 삽입 과 수정을 할 수있습니다. * MERGE INTO 예문 1 MERGE INTO USER_MASTER UM -- Table USING ( SELECT UI.USER_ID, UI.USER_NAME, UI. NO , UG.GROUP_NAME FROM USER_MASTER_IMPORT UI LEFT JOIN USER_GROUP UG ON UI.USER_ID = UG.USER_ID ) UI -- Target table ON (UM.USER_ID = UI.USER_ID) -- 대상테이블(Target table)과의 JOIN 조건 -- 조건이 일치할 경우 WHEN MATCHED THEN UPDATE SET USER_NAME = USER_MASTER_IMPORT.USER_NAME -- 일치하지 않을 경우(10G에서 사용이 안될 경우도 있습니다.) WHEN NOT MATCHED THEN INSERT (USER_ID, USER_NAME, NO , GROUP_NAME) --INSERT 시 INTO를 사용하지 않음에 주의 VALUES (UI.USER_ID, UI.USER_NAME, UI. NO , UI.GROUP_NAME) |
-------------------------------------------------------------------------------------------------
/* MERGE INTO 예문2 MERGE INTO TABLE_NAME TBL1 USING TARGET_TABLE TABL2 -- 동일한 테이블일 경우 TARGET_TABLE을 DUAL로 지정 ON TBL1.COLUMN_NAME = TABL2.COLUMN_NAME -- 두 테이블을 JOIN하는 조건문 WHEN MATCHED THEN --조건에 맞을 경우 UPDATE SET COL1 = VAL1 ,COL2 = VAL2 ,COL3 = VAL3 WHEN NOT MATCHED THEN --조건에 맞지 않을 경우 INSERT (COL1, COL2, COL3) VALUES (VAL1, VAL2, VAL3) |