본문 바로가기
ORACLE

MERGE INTO

by 1TAL 2019. 12. 16.

과거에 퍼포먼스 문제로 별로 사용하지 않았지만, 지금이야 뭐 ~~

 

조건과 매칭이 되면 update 안되면 insert 처리 하기 위함  ( 다량의 데이터 처리 )

 

단, MERGE INTO에 CLOB필드가 있을 경우 사이즈가 크면 ORA-00600 에러 발생

 

 MERGE <HINT> INTO <TABLE_NAME>
 USING ( <TABLE_VIEW or QUERY>) B
 ON ( <CONDITION> )
 WHEN MATCHED THEN < UPDATE_CLAUSE>
 WHEN NOT MATCHED THEN  < INSERT_CLAUSE>

UPDATE에 매칭되는 데이터는 삭제할 수 있음.

DELETE 문법을 이용해서 삭제 후 INSERT 문법을 활용하는데 이렇게 하면 인덱스가 점점 안 좋아 질 수 있고, 서비스 테이블에서 조회하려는 시점에 아무 정보도 못 얻어서 비지니스 적인 오류가 발생하기도 함.

MERGE INTO 테이블A
USING DUAL
ON ( A.KEY = B.KEY )
WHEN MATCHED THEN
    UPDATE SET A.DATA1 = B.DATA1
    DELETE WHERE (B.DEL_YN = 'Y')
WHEN NOT MATCHED THEN
   
INSERT (KEY, DATA1) VALUES (B.KEY, B.DATA1);

 

 

※ DELETE도 가능함 ( 오라클 10g 이후 )

 

※ MERGE UPDATE, INSERT 절의 WHERE 절의 조건은 인라인 뷰에 기술하는것이 성능적으로 바람직함.

   단, 둘다 이용할 경우에는 결과가 달라지지 않도록 주의 해야 함

반응형

'ORACLE' 카테고리의 다른 글

ORA-06508  (0) 2020.01.14
drop table  (0) 2020.01.13
권한 관련 VIEW  (0) 2019.12.11
Create the synonym  (0) 2019.11.07
DB LINK 테이블 정보 보기  (0) 2019.05.10