SQL Merge Kullanımı | SQL Merge Komutu

Sql Merge Kullanımı | SQL Merge Komutu

 

Oracle SQL Merge kullanımı son derece basit bir syntaxtadır. Oracle SQL MERGE işlemi tıpkı SELECT,UPDATE,DELETE,INSERT gibi bir Data Manupilation Language (DML) ifadesidir. Kullanımı için ufak bir örneği aşağıdaki gibidir.

MERGE INTO calisanlar e
USING kayitlar h --veya bir select ifadesi (select * from kayitlar where rownum<5 --örnek)
ON (e.calisan_id= h.calisan.id)
WHEN MATCHED THEN
UPDATE SET e.adres= h.adres
WHEN NOT MATCHED THEN
INSERT (calisan_id, adres)
VALUES (h.calisan_id, h.adres);

 

Sql Merge Kullanımı Faydası

Verilerin varlığına bağlı ve şartlı olarak veri eklemek ya da güncellemek için, Oracle 9i’de bir MERGE ifadesi tanıtıldı. Oracle SQL Merge Kullanımı kısaca UPSERT gerçekleştirmek . Update ve Insert in kısaltmaları olarak kullanılan bu ifade bize merge kullanmanın nedenini daha iyi anlatıyor sanki 🙂

Aynı zamanda MERGE ifadesi, tablo taramalarını azaltır ve gerektiğinde işlemi paralel olarak gerçekleştirebilir.

Bir tablo veya view de INSERT veya UPDATE işlemleri için bir veya daha fazla kaynaktan gelen satırları seçmek için MERGE deyimini kullanın. Hedef tablonun veya viewin güncellenip güncellenmeyeceğini belirlemek için koşulları belirtebilirsiniz. Merge işlemi, birden çok işlemi birleştirmenin kullanışlı bir yoludur. Birden çok INSERT, UPDATE ve DELETE DML ifadelerinden kaçınmanıza izin verir.



Sql Merge Kullanımı Örnekleri

 

İki farklı senaryomuz olsun.

1.si bir tablodaki sadece bir kolonun verisini,  tablonun eski bir yedeğindeki aynı kolon verisi ile değiştirmek olsun. Yani Kolon değerini eski değerine güncelleyeceğiz.

2.si ise bir tablodaki kayıp olan veriler öteki bir tabloda bulunuyor ve tablolardaki sütunları eşleştirip kayıp veriyi,kayıp verileri olan tabloya kopyalamak isteyelim.

iki senaryo da aynı işi yapacaktır. Ancak 2. senaryoda tabloları eşlerken “on” ifadesinde birden çok değer kullanacağız

 

  1. Oracle SQL Merge Kullanımı 1. senaryo;
merge into tablo_guncel t using yedek_tablo v
on (t.rowkey = v.rowkey)
when matched then
update set t.project_activity_id = v.project_activity_id

“on” ifadesinde rowkeyler unique’dir yani her satırda farklı bir değerdir. Dolayısı ile tablonun satırları eşleştirilmiş oldu.

Update işleminden sonra “when not matched then” kullanmadık çünkü eşleştirilmiyorsa bir değişiklik yapma onlar güncel tabloya yeni girilen değerlerdir diye düşündük. Artık yedek tablodaki project_activity_id değerlerimiz güncel tablomuza da update edildi.

 

2. Oracle SQL Merge Kullanımı 2. senaryo;

merge into inv_accounting_row_tab t
using voucher_row_tab v
on (t.invoice_id = v.invoice_id
and t.item_id = v.item_id
and t.row_id v.row_id
)
when matched then
update
set t.project_activity_id = v.project_activity_id
where t.code_f is not null
and t.project_activity_id is null
and t.voucher_type = v.voucher_type
and v.project_activity_id is not null
and t.voucher_no = v.voucher_no

 

“on” ifadesi içerisinde tablo satır verileri bire bir eşleştirilmiş. Bunu Join işlemi gibi düşünün. Başka bir tablodan kolon eklemek istediğinizde On ifadesi ile 2 tablo eşleştirilmek durumundadır.

Aslında burada on ifadesi içerisinde yazılan eşleştirmelerin hiçbiri bu tabloda uniq olarak bulunmuyor ancak bu eşleştirmelerin 3 ü birden kullanıldığında uniq bir değer oluşturuyor. Yani “on” içerisine birden çok eşleştirme ile iki tablo arasındaki satır verilerimizi eşleştirdik. Yani bir nevi SQL Merge Kullanımı ile , on ifadesi içerisinde iki tabloyu join ettik. Sonrasında update işlemi gerçekleştirdik.

Buraya koşullarınızı yazmamalısınız. Koşullarınızı update deyiminden sonra  where clause içerisine yazmanız gerekir.

SQL Merge Komutu yazımızın sonuna geldik.

Diğer Oracle SQL Yazılarım için TIKLAYIN

Faydalandığım Kaynak

Daha Faydalı yazılarda görüşmek dileğiyle 🙂



Sql Merge Kullanımı, Sql Merge Komutu
Sql Merge Kullanımı, Sql Merge Komutu