본문 바로가기

개발새발

[DB/SQL] Oracle에서 존재 여부 확인하고 Insert/Update 하기.

Update 할 때 해당하는 행이 없으면 Insert를 수행할 수 없을까?

select 해서 결과를 확인하고 update를 할 수도 있겠지만 쿼리 한 번에 끝내고 싶어 방법을 찾아보았다.

 

해답은 MERGE. 아마 어느정도 최신 버전 오라클에서만 작동하는 것 같다.

(11g에서 잘 작동 함.)

 

 

[구문]

MERGE INTO --[테이블 이름]

USING --서브쿼리 또는 DUAL

ON ( -- 조건 -- )

WHEN MATCHED THEN --서브쿼리 결과가 존재할 경우

WHEN NOT MATCHED THEN --서브쿼리 결과가 존재하지 않을 경우

 

 

[예시]

merge into t_test

using dual

on ( testcol1 = :value )

when matched then update set testcol2='test'

when not matched then insert (testcol1, testcol2) values ('new', 'test');

 

 

DUAL에 대한 서브쿼리도 가능하니 using~on 부분은 필요한 대로 개조하면 된다.

그리고 when 조건은 하나씩만 사용할 수도, delete나 select를 할 수도 있다.

 

업데이트 하자고 셀렉트 날리고 검사하고 조건문에서 업데이트 / 인설트 하기가 별로인 사람에게 좋은 방법이다.