Oracle Ders 35 – Merge
Merhaba Arkadaslar,
Bu yazimda Oracle da Merge (Eslestirme) ifadesinden bahsedecegim. Merge yapisi ile birden fazla DML(Database Manipulation Language) ifadeleri (insert,update,delete) tek bir SQL ifadesi ile birlikte kullanilabilir.
Oncelikle 2 tablo olusturalim ve uzerinde incelemeye baslayalim.
create table merge1 ( col1 number, col2 varchar2(20) ); insert into merge1 values (1,'A'); insert into merge1 values (2,'B'); insert into merge1 values (3,'C'); create table merge2 as select * from merge1; select * from merge1; select * from merge2;
merge1 tablosunu olusturduk ve 3 tane yeni kayit ekledik. merge2 tablosunu ile as.. select yapisi ile olusturduk. Sonuc olarak 2 tabloda da ayni veriler mevcut. Daha onceki yazilarimda bu yapidan bahsetmistim.
Daha sonrasinda merge1 tablomuzda 3 adet yeni kayit ekleyelim.
insert into merge1 values (4,'D'); insert into merge1 values (5,'E'); insert into merge1 values (6,'F');
Asagidaki ornegimizi inceleyelim…
merge into merge2 m2 using merge1 m1 on (m2.col1 = m1.col1) when matched then update set m2.col2 = m1.col2 when not matched then insert (col1,col2) values (m1.col1,m1.col2);
Merge into merge2 m2; merge2 tablosu uzerinde degisiklik olacak anlamina gelmektedir.
using merge1 m1 ; eslesme/merge islemini yaparken merge1 tablosundan yararlanacagiz anlamina gelmektedir.
on(m2.col1 = m1.col1) join yapisi bu iki alan uzerinden saglanacaktir.
Merge ifadesini kullanirken ,eslesme saglandiginda ( when matched then ) update islemi gerceklestiriyoruz. Eslesme saglanmadiginda ise ( when not matched then) insert islemi gerceklestiriyoruz. (insert ifadesinde into kullanmiyoruz ) . merge1 (m1) tablosunda yer alan eslesmeyen kayitlari ise merge2 (m2) tablosuna ekliyoruz.
Merge ifadesinde update ve insert yapisina UPSERT ifadesi de denilmektedir.
select * from merge2;
Gordugunuz gibi istedigimiz gibi merge islemi gerceklesti. 2.orgenimiz icin asagidaki merge yapisini inceleyelim ;
merge into merge2 m2 using merge1 m1 on (m2.col1 = m1.col1) when matched then update set m2.col2 = m1.col2 delete where m1.col1 <3;
Burada dikkat ederseniz sadece when matched then ifadesi kullanilmistir. when matched ve when not matched zorunlu degildir.
Burada eslesme saglandigi durumda ,delete islemi gerceklestirildi. (col1 alani 3ten kucuk kayitlar silindi)
select * from merge2;
Yazimi burada sonlandiriyorum.
Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
injavawetrust
Leave a Reply