Основното правило е, че ако можете да го направите в един SQL, той обикновено ще работи по-добре, отколкото да го правите в множество SQL изрази.
Бих избрал MERGE, ако върши работа.
Също така - още едно предложение:можете да избегнете повтарянето на данни в изявлението си, напр.:
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)