반응형
테이블을 조회해서 해당 조건으로 데이터가 존재하면 업데이트 하고
없으면 쑤셔 넣는다는 똑똑한 녀석이다.
실제 쿼리문에서 테이블명이랑 컬럼명만 임의로 막 변경한 거라서 대충 흐름만 보도록 하자.
잘 보다보니 이 놈을 이용해서 시퀀스 넘버도 가져와서 넣을 수 있다. 좋다.
ON 부분에는 다중 조건을 쓸 수 있다.
UPDATE나 INSERT를 할때 USING 문에서 뽑아온 값으로 넣을 수도 있다.
MERGE INTO seq_table f
USING (
select col1, col2, col3, col4, col5
, (select max(sqno) + 1
from seq_table x
where t.col1 = x.col1
and t.col2 = x.col2
) as seqno
from base_table t
, seq_table c
where t.col1 = c.col1(+)
and t.col2 = c.col2(+)
and t.col3 = c.col3(+)
) chk
ON (
f.col1 = chk.col1
AND f.col2 = chk.col2
AND f.col2 = chk.col2
)
WHEN MATCHED THEN
UPDATE
SET col4 = chk.col4
, col5 = 'test'
WHEN NOT MATCHED THEN
INSERT (
col1, col2, col3, col4, col5
) VALUES ( 'zz', 'aa', 'bbb', chk.col, chk.seqno )
없으면 쑤셔 넣는다는 똑똑한 녀석이다.
실제 쿼리문에서 테이블명이랑 컬럼명만 임의로 막 변경한 거라서 대충 흐름만 보도록 하자.
잘 보다보니 이 놈을 이용해서 시퀀스 넘버도 가져와서 넣을 수 있다. 좋다.
ON 부분에는 다중 조건을 쓸 수 있다.
UPDATE나 INSERT를 할때 USING 문에서 뽑아온 값으로 넣을 수도 있다.
MERGE INTO seq_table f
USING (
select col1, col2, col3, col4, col5
, (select max(sqno) + 1
from seq_table x
where t.col1 = x.col1
and t.col2 = x.col2
) as seqno
from base_table t
, seq_table c
where t.col1 = c.col1(+)
and t.col2 = c.col2(+)
and t.col3 = c.col3(+)
) chk
ON (
f.col1 = chk.col1
AND f.col2 = chk.col2
AND f.col2 = chk.col2
)
WHEN MATCHED THEN
UPDATE
SET col4 = chk.col4
, col5 = 'test'
WHEN NOT MATCHED THEN
INSERT (
col1, col2, col3, col4, col5
) VALUES ( 'zz', 'aa', 'bbb', chk.col, chk.seqno )
반응형
댓글