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;

oracle 35 merge1

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;

oracle 35 merge

Yazimi burada sonlandiriyorum.

Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
injavawetrust

Print Friendly, PDF & Email

Leave a Reply

Your email address will not be published. Required fields are marked *