Özet: Tablonun bir kopyasını oluşturduktan bir süre, aradaki farkları bulup tabloları tekrar eşlemek için kullanılan “merge into” yapısı anlatılıyor.

 

“Merge Into” kavramıyla birlikte iki farklı tablo arasındaki farka bakarak gerekli insert ve updateleri yapabiliriz. Personel tablosu oluşturalım ve içine data atalım.

CREATE TABLE PERSONNEL
(
 PERSONNELID NUMBER,
 NAME VARCHAR2(10 BYTE),
 LAST_NAME VARCHAR2(10 BYTE),
 DEPARTMENTID NUMBER
)
Insert into PERSONNEL
 (PERSONNELID, NAME, LAST_NAME, DEPARTMENTID)
 Values
 (50, 'John', 'Ally', 2);
Insert into PERSONNEL
 (PERSONNELID, NAME, LAST_NAME, DEPARTMENTID)
 Values
 (904, 'Ahmet', 'Gezgin', 1);
Insert into PERSONNEL
 (PERSONNELID, NAME, LAST_NAME, DEPARTMENTID)
 Values
 (120, 'Salih', 'Atan', 3);
Insert into PERSONNEL
 (PERSONNELID, NAME, LAST_NAME, DEPARTMENTID)
 Values
 (485, 'Sinem', 'Keskin', 1);
COMMIT;

Aynı tablodan bir tane daha oluşturalım

CREATE TABLE PERSONNEL_2 AS SELECT * FROM PERSONNEL;

İlk tabloya yeni kayıtlar ekleyelim.

Insert into PERSONNEL
 (PERSONNELID, NAME, LAST_NAME, DEPARTMENTID)
 Values
 (85, 'Yunus', 'Tavas', 2);
COMMIT;

Ve bir kaydın DEPARTMENTID’sini değiştirelim.

UPDATE PERSONNEL SET DEPARTMENTID=3 WHERE PERSONNELID=904;
Commit;

Şimdi Merge Into ‘yu kullanarak farkları eşitleyelim.

MERGE INTO PERSONNEL_2 P2
 USING (SELECT NAME,
 LAST_NAME,
 PERSONNELID,
 DEPARTMENTID
 FROM PERSONNEL) P1
 ON (P2.PERSONNELID = P1.PERSONNELID)
WHEN MATCHED
THEN
 UPDATE SET P2.DEPARTMENTID = P1.DEPARTMENTID
WHEN NOT MATCHED
THEN
 INSERT (P2.NAME,
 P2.LAST_NAME,
 P2.PERSONNELID,
 P2.DEPARTMENTID)
 VALUES (P1.NAME,
 P1.LAST_NAME,
 P1.PERSONNELID,
 P1.DEPARTMENTID)

Son durumda iki tablo eşit hale geldi.