MERGE в Oracle SQL. Введение
Когда нужно обновить строки, если они существуют, или вставить новые, если их нет, чаще всего применяют два запроса: UPDATE, а затем INSERT. Однако Oracle предлагает более элегантное решение: оператор MERGE, который объединяет обе операции в одном SQL-выражении. Это особенно полезно при синхронизации данных между таблицами или при импорте данных из внешних источников.
🔤 Написание
🔄 Где часто используется
В ETL-обработке и загрузке данных
При обновлении справочников и кэшей
В миграциях и интеграции данных между системами
В Data Warehousing
В автоматических механизмах обновления записей
🧪 10 Примеров использования с пояснениями
1️⃣ Базовое объединение INSERT и UPDATE
Если сотрудник с ID 101 найден — обновим имя, если нет — добавим.
2️⃣ MERGE из одной таблицы в другую
Обновление или вставка из другой таблицы.
3️⃣ MERGE с дополнительным условием внутри блока
Дополнительная фильтрация при обновлении.
4️⃣ Мёрдж только с INSERT
Добавляем только тех, кто отсутствует.
5️⃣ MERGE только с UPDATE
Обновляем только существующих.
6️⃣ MERGE с DUAL — одиночная синхронизация
Обновление или добавление конфигурационного параметра.
7️⃣ Мэердж с RETURNING INTO
Получаем ID вставленной строки.
8️⃣ MERGE с обработкой нескольких полей
Комплексное обновление записей.
9️⃣ MERGE с дополнительными логическими условиями
Обновляем только активных пользователей.
🔟 MERGE с отслеживанием обновлений через флаг
Добавляем поле для регистрации даты изменения.
🧩 Заключение
MERGE — это мощный оператор, который объединяет логику вставки и обновления в одной конструкции. Это делает SQL-запросы более читаемыми, производительными и безопасными, особенно при работе с большими наборами данных.
💡 Запомни:
MERGEнужен, когда нужно «обновить или вставить»Экономит код и запросы
Поддерживает условия
WHEN MATCHEDиWHEN NOT MATCHEDРаботает с таблицами и DUAL
Отлично подходит для ETL и репликации
🔜 Следующая статья:
CONNECT_BY_ISLEAF в Oracle SQL — как определить конечные узлы в иерархических запросах