Если ты сначала пытаешься обновить строку, а если её нет — вставляешь новую, не пиши две команды. Используй
MERGE — это быстрее, чище и атомарно.🔧 Пример:
MERGE INTO employees e
USING (SELECT 101 AS emp_id, 'Alice' AS name FROM dual) src
ON (e.emp_id = src.emp_id)
WHEN MATCHED THEN
UPDATE SET e.name = src.name
WHEN NOT MATCHED THEN
INSERT (emp_id, name)
VALUES (src.emp_id, src.name);
📌 Что делает:
• Ищет по ключу (`ON`)
• Если запись есть — обновляет
• Если нет — вставляет
• Всё за один проход, без гонок и лишних проверок
⚡ Почему это важно:
• Меньше round-trip'ов между приложением и БД
• Атомарная логика —
MERGE гарантирует целостность • Лучше подходит для ETL, синхронизации, загрузки внешних данных
🧠 Вывод: если пишешь
IF EXISTS THEN UPDATE ELSE INSERT — ты уже проиграл. Пиши
MERGE, и база всё сделает за тебя.