오라클 9i부터 merge명령어가 제공된다. 이것은 MySQL에서 사용하던 replace와 동일한 기능을 제공한다. 즉, 어떤 레코드를 테이블에 insert할때 이미 레코드가 존재한다면 update를 하고, 존재하지 않는다면 insert를 수행하게 된다.
기존 select후 레코드존재 여부파악 -> 있음 -> update -> 없음 -> insert
위와 같이 여러번의 SQL문을 수행해야 하는 횟수를 줄여준다. 여기서는 간단한 사용법만을 이야기 하겠다.
test라는 테이블에 다음과 같은 데이터가 존재한다. SQL> select * from test;
ID NAME ---------- ---------- 1 22 2 33 3 3 4 4
id = 5 레코드는 존재하지 않으므로 insert되게 된다. SQL> merge into test D 2 using (select 5 id, 'maddog' name from dual) S 3 on (D.id = S.id) 4 when matched then update set D.name=S.name 5 when not matched then insert (D.id, D.name) values (S.id, S.name);
1 row merged.
SQL> select * from test;
ID NAME ---------- ---------- 1 22 2 33 3 3 4 4 5 maddog
id = 5 레코드는 이미 insert되어 있으므로 update되게 된다. SQL> merge into test D 2 using (select 5 id, 'myunggyu' name from dual) S 3 on (D.id = S.id) 4 when matched then update set D.name=S.name 5 when not matched then insert (D.id, D.name) values (S.id, S.name);
1 row merged.
결과화면이다. SQL> select * from test;
ID NAME ---------- ---------- 1 22 2 33 3 3 4 4 5 myunggyu
SQL> |
This article comes from dbakorea.pe.kr (Leave this line as is)
|