zasada praktyczna oznacza to, że jeśli możesz to zrobić w jednym SQL, generalnie będzie działać lepiej niż w wielu instrukcjach SQL.
Pójdę z MERGE, jeśli to zadziała.
Również - inna sugestia:możesz uniknąć powtarzania danych w swoim wyciągu, np.:
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)