ฉันใช้ตัวอย่างรหัสแรกมาหลายปีแล้ว แจ้งให้ทราบล่วงหน้าพบไม่นับ
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;
รหัสด้านล่างนี้อาจเป็นรหัสใหม่และที่ได้รับการปรับปรุง
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)
ในตัวอย่างแรกการอัพเดตจะทำการค้นหาดัชนี จะต้องเพื่ออัปเดตแถวที่ถูกต้อง Oracle เปิดเคอร์เซอร์โดยนัยและเราใช้มันเพื่อแทรกการแทรกที่สอดคล้องกันดังนั้นเราจึงรู้ว่าการแทรกจะเกิดขึ้นเมื่อไม่มีคีย์เท่านั้น แต่การแทรกเป็นคำสั่งอิสระและต้องทำการค้นหาครั้งที่สอง ฉันไม่ทราบว่าทำงานภายในของคำสั่งผสาน แต่เนื่องจากคำสั่งเป็นหน่วยเดียว Oracle อาจมีการแทรกหรือปรับปรุงที่ถูกต้องด้วยการค้นหาดัชนีเดียว
ฉันคิดว่าการผสานดีกว่าเมื่อคุณมีการประมวลผลที่ต้องทำซึ่งหมายถึงการรับข้อมูลจากบางตารางและอัปเดตตารางอาจแทรกหรือลบแถว แต่สำหรับกรณีแถวเดี่ยวคุณอาจพิจารณากรณีแรกเนื่องจากไวยากรณ์เป็นเรื่องปกติมากขึ้น