반응형
테이블을 조회해서 해당 조건으로 데이터가 존재하면 업데이트 하고
없으면 쑤셔 넣는다는 똑똑한 녀석이다.
실제 쿼리문에서 테이블명이랑 컬럼명만 임의로 막 변경한 거라서 대충 흐름만 보도록 하자.
잘 보다보니 이 놈을 이용해서 시퀀스 넘버도 가져와서 넣을 수 있다. 좋다.
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 )
반응형
'TechNical > Oracle' 카테고리의 다른 글
[튜닝] 불필요한 정렬 제거 (0) | 2019.05.24 |
---|---|
오라클 DBLINK 하면 ORA-01017: invalid username/password; logon denied 오류 (8) | 2011.09.18 |
각 그룹 금액의 합의 비율금액의 합계 쿼리.... 뭐야 -_-;; (0) | 2010.09.17 |
distinct 때메 생긴 그지같은 오라클 쿼리 에러 -_- (0) | 2010.08.27 |
GROUP BY 절에 DECODE로 된걸 SELECT 절에서 스칼라로 써 먹을 순 없나? (2) | 2010.04.29 |
댓글