봉봉의 개인 블로그

2018-06-01(MSSQL merge) 본문

입사후 공부한내용

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

Comments