7.5 MERGE

<< İçindekileri Görüntülemek İçin Tıklayın >>

Yer:  Teknik Kılavuzlar > IVEDI SQL Kullanıcı Kılavuzu > 7. Veri işleme (DML) >

7.5 MERGE

MERGE INTO <hedef> USING <kaynak> ON <koşul>
  WHEN NOT MATCHED [AND <koşul>] THEN INSERT [ ( <sütunlar> ) ] VALUES ( … )
  WHEN MATCHED     [AND <koşul>] THEN UPDATE SET <sütun> = <ifade> [, …]
  WHEN MATCHED     [AND <koşul>] THEN DELETE
  [RETURNING <ifadeler> [INTO :<değişkenler>]]

En az bir WHEN zorunludur; kaynak satır başına uygulanabilir ilk eylem kazanır. Üç eylem türü de yerel motorda uygulanmıştır. Hedefin kendisi USING kaynağı olabilir. Kaynak bir tablo, görünüm, ( SELECT … ) <takma ad> türetilmiş tablosu (başka bir veritabanındaki tabloları da okuyabilir) ya da tablo döndüren bir ifade (seçilebilir yordam) olabilir; tablo olmayan kaynak bir kez okunur ve eşleştirme onun üzerinde yapılır. INSERT'in sütun listesi yazılmazsa INSERT deyimiyle aynı kural uygulanır (GENERATED ALWAYS, salt okunur ve gizli sütunlar dışarıda). SET'te noktalı ad (t.b) deyim kapsamında, çıplak ad hedef ilişkide çözülür. JSON_TABLE doğrudan kaynak olamaz (UNSUPPORTED_FEATURE); bir alt sorguya sarılır: USING (SELECT … FROM JSON_TABLE(…)) j.

MERGE INTO musteri m
  USING (SELECT id, upper(ad) AS ad FROM arsiv_db.app.musteri WHERE aktif = 1) k ON (m.id = k.id)
  WHEN MATCHED THEN UPDATE SET ad = k.ad
  WHEN NOT MATCHED THEN INSERT (id, ad) VALUES (k.id, k.ad);
Sınır

WHEN NOT MATCHED BY SOURCE/TARGET, INSERT DEFAULT VALUES, THEN DO NOTHING ve THEN SIGNAL yazımları ayrıştırılmaz.