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를 할 수도 있다.
업데이트 하자고 셀렉트 날리고 검사하고 조건문에서 업데이트 / 인설트 하기가 별로인 사람에게 좋은 방법이다.
'개발새발' 카테고리의 다른 글
[DB/SQL] INSERT INTO ALL 구문으로 두 개 테이블 동시 INSERT 하기. (0) | 2019.07.17 |
---|