Yıllardır ilk kod örneğini kullanıyorum. Dikkat saymak yerine not edildi.
UPDATE tablename SET val1 = in_val1, val2 = in_val2
WHERE val3 = in_val3;
IF ( sql%notfound ) THEN
INSERT INTO tablename
VALUES (in_val1, in_val2, in_val3);
END IF;
Aşağıdaki kod muhtemelen yeni ve geliştirilmiş koddur
MERGE INTO tablename USING dual ON ( val3 = in_val3 )
WHEN MATCHED THEN UPDATE SET val1 = in_val1, val2 = in_val2
WHEN NOT MATCHED THEN INSERT
VALUES (in_val1, in_val2, in_val3)
İlk örnekte, güncelleme bir dizin araması yapar. Doğru satırı güncellemek için gerekir. Oracle, örtük bir imleç açar ve karşılık gelen bir eki sarmak için kullanırız, böylece ekin yalnızca anahtar bulunmadığında gerçekleşeceğini biliyoruz. Ancak ekleme bağımsız bir komuttur ve ikinci bir arama yapmak zorundadır. Birleştirme komutunun iç işleyişini bilmiyorum, ancak komut tek bir birim olduğundan, Oracle tek bir dizin aramasıyla doğru ekleme veya güncellemeyi yürütebilirdi.
Bazı tablolardan veri almak ve bir tabloyu güncellemek, muhtemelen satır eklemek veya silmek anlamına gelen yapılacak bazı işlemlerinizde birleştirmenin daha iyi olduğunu düşünüyorum. Ancak tek satırlık durum için, sözdizimi daha yaygın olduğu için ilk durumu düşünebilirsiniz.