MERGE komutu, özellikle ETL (extract, transform, load) işlemlerinde hayatı kolaylaştıran komutlardan biri. Yaptığı iş bir tablodan diğer tabloya veri kopyalarken, hedef tabloda verilen kriterlere uygun kayıtların olup olmadığına bakmak, kriterlere uygun kayıt varsa UPDATE (veya istersek DELETE) ile kaydı güncellemek, eğer kayıt yoksa kaynak tablodan verileri alarak hedef tabloya INSERT etmek. Bütün bu işlemleri tek komutla yapmanın, özellike data warehouse uygulamaları geliştirenler için ne kadar yararlı olduğunu tahmin edebilirsiniz.
Varsayalım employees tablosunda maaşları (salary kolonunu) güncelleyeceğiz ve bu işlemden önce employees tablosundaki bazı kolonları salaries tablosuna kopyalamak istiyoruz. Salaries tablosundaki constraintler (örneğin employee_id primary key) ve/veya triggerlar yüzünden aynı employee_id’sine ait ikinci bir kaydı salaries tablosuna kopyalamıyoruz. Bu yüzden varolan kayıtları UPDATE edeceğiz, olmayanları ise INSERT ile ekleyeceğiz. Bu işlem için aşağıda yazdığım MERGE komutu yeterli olacaktır:
MERGE INTO salaries s
USING (SELECT * FROM employees) e
ON (s.employee_id = e.employee_id)
WHEN MATCHED THEN
UPDATE SET s.salary = e.salary
WHEN NOT MATCHED THEN
INSERT VALUES(e.employee_id, e.salary);
MERGE ile aynı zamanda DELETE işlemininde yapılabileceğini söylemiştim. Bir önceki işlemde, employees tablosounda salary’si 0 olan kayıtları salaries tablosundan silmek istersek ne yapabiliriz? Bu DELETE’i de MERGE komutumuza eklememiz mümkün:
MERGE INTO salaries s
USING (SELECT * FROM employees) e
ON (s.employee_id = e.employee_id)
WHEN MATCHED THEN
UPDATE SET s.salary = e.salary
DELETE WHERE e.salary = 0
WHEN NOT MATCHED THEN
INSERT VALUES(e.employee_id, e.salary)
Görüldüğü üzere MERGE pratik olarak tablolar arasında veri transferi yapmamızı sağlıyor. MERGE komutu Oracle tarafından tasarlanmış ve 2001 yılnda piyasaya sürülen 9i ile kullanılmaya başlamıştır. Daha sonra ANSI tarafından kabul görmüş ve SQL:2003 standartlarına dahil edilmiştir. MERGE komutunun tarihini anlatmamım sebebi SQL Server 2008 ile gelen yenilikler içerisinde MERGE SQL Komutunu görmem. Yani artık SQL Server kullanıcıları da bu komutu kullanabilecekler. Bilgi için SQL Server 2008′in “New Features” sayfasında INTELLIGENT altında “MERGE SQL Statement” başlığına göz atabilirsiniz. Özetle Microsoft, SQL Server artık daha akıllı çünkü MERGE bile yapabiliyor diyor. Yalnız benim kafama şu takıldı: 7 yıl rötarla bir ANSI/SQL komutunu desteklemeye başlamak, nasıl bir ”intelligence/zeka” göstergesidir
Konu 90 kere Okundu
Kategori Oracle
Beğendiyseniz Paylaşın
- Google Buzz ekleyin
- Delicious
- Digg this
- StumbleUpon
- MySpace
- Technorati

Yusuf Arslan
Oracle Open Source
1985 Tokat/Reşadiye doğumluyum.İlk-orta-lise hayatını Amasya/Suluova ilçesinde geçirdim.Sakarya Üniversitesi Bilgisayar Mühendisliği bölümünü bitirdikten sonra kariyerime Oracle,SAP alanlarında danışmanlık vermek üzere devam etmekteyim. Kullandığım,bildiğim teknolojiler ve diller; SAP BO Oracle BI Applications Oracle Data Mining Oracle BI Reports(http://www.iski.gov.tr/web/statik.aspx?KID=1000717) Oracle Data Integrator Oracle BI Publisher(XML Publisher) Oracle Database 10g Oracle Mapviewer PL/SQL,Java,Oracle JDeveloper,Oracle Forms-Reports,C# Data warehouse process optimization Database system implementation Using encoding for security systems Software development, test and deployment Presentation and communication skills Bu adreslerden de bana ulaşabilirsiniz, [email protected] https://datawarehouse.gen.tr/ http://www.arslanyusuf.blogspot.com/ http://yusufarslaneng.blogspot.com/ http://twitter.com/yusars http://tr.linkedin.com/pub/yusuf-arslan/27/35b/57bWebsite: arslanyusuf.blogspot.com/ E-posta: Bu e-Posta adresi istek dışı postalardan korunmaktadır, görüntülüyebilmek için JavaScript etkinleştirilmelidir
En Son Yusuf Arslan
Yorum yaz
Make sure you enter the (*) required information where indicated.
Basic HTML code is allowed.