La règle empirique c'est-à-dire que si vous pouvez le faire dans un SQL, cela fonctionnera généralement mieux que de le faire dans plusieurs instructions SQL.
J'irais avec le MERGE s'il fait le travail.
Aussi - autre suggestion :vous pouvez éviter de répéter des données dans votre relevé, par exemple :
MERGE INTO table
USING (SELECT 'some_id' AS newid,
'some_val' AS newval
FROM dual)
ON (rowid = newid)
WHEN MATCHED THEN
UPDATE SET colname = newval
WHEN NOT MATCHED THEN
INSERT (rowid, colname)
VALUES (newid, newval)