Ö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.