입사후 공부한내용
2018-06-01(MSSQL merge)
봉봉이네
2018. 6. 1. 16:08
보통 수정기능이 있는 화면을 구현하다보면 신규는 insert 수정은 update 문을 사용해야한다.
또 Row가 있는지 없는지 확인하는 select 쿼리까지 필요하다.
merge into 문을 사용하면 하나의 쿼리로 가능하다.
예문
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | merge into tb_tbl aa using(select :v_user_id as user_id,:v_key_col1 as key_col1 from dual) bb on (aa.key_col1 = bb.key_col1) when matched then update key_col1 = bb.key_col1, modifier = bb.user_id, mod_ddtt = sysdate when not matched then insert ( modifier, mod_ddtt, register, reg,ddtt, key_col1 ) values ( bb.modifier, bb.mod_ddtt, bb.user_id, sysdate, bb.key_col1 ) | cs |
구문
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | merge into tb_tbl aa using(서브쿼리 결과가 NULL 이면 에러가 발생한다.) bb on (aa.key_col1 = bb.key_col1) -- 키값이 테이블에 있는지 비교합니다. when matched then --테이블에 이미 키값이 있다면 update update key_col1 = bb.key_col1, modifier = bb.user_id, mod_ddtt = sysdate when not matched then --테이블에 키 값이 없을때 insert insert ( modifier, mod_ddtt, register, reg,ddtt, key_col1 ) values ( bb.modifier, bb.mod_ddtt, bb.user_id, sysdate, bb.key_col1 ) | cs |
출처 : http://javafactory.tistory.com/534
참고 : http://www.gurubee.net/lecture/2225