- Возможно выполнение операций условного обновления, вставки и удаления данных в таблице базы данных.
- Выполняется операция
UPDATE
, если строки существуют, и операцияINSERT
, если это новая строка:- исключает необходимость в отдельных обновлениях;
- повышается производительность и простота использования;
- удобна в приложениях хранилища данных.
Сервером Oracle поддерживается инструкция MERGE
для операций INSERT
, UPDATE
и DELETE
. Используя эту инструкцию, можно обновить, вставить или удалить строку по условию в таблице, таким образом исключая необходимость применения нескольких инструкций DML. Решение о выполнении обновления, вставки или удаления в целевой таблице основывается на условии в предложении ON
.
Необходимо иметь объектные привилегии INSERT
и UPDATE
на целевую таблицу и объектную привилегию SELECT
на исходную таблицу. Чтобы задать предложение DELETE
для merge_update_clause
, необходимо также обладать объектной привилегией DELETE
на целевую таблицу.
Инструкция MERGE
является детерминированной. Одну и ту же строку целевой таблицы невозможно обновить несколько раз в одной и той же инструкции MERGE
.
Альтернативный подход состоит в использовании циклов PL/SQL и нескольких инструкций DML. Однако инструкцию MERGE
удобно использовать и проще выразить в виде одиночной инструкции SQL.
Инструкция MERGE
удобна в ряде приложений хранилища данных. Например, в приложении хранилища данных иногда возникает необходимость в работе с данными, поступающими из нескольких источников, часть из которых может быть дубликатами. Инструкция MERGE
позволяет добавлять и изменять строки по определенному условию.
Синтаксис инструкции MERGE
Используя инструкцию MERGE
, можно по определенному условию вставлять, обновлять и удалять строки в таблице.
Объединение строк
Используя инструкцию MERGE
, можно обновлять существующие строки и вставлять новые строки по определенному условию. Применяя инструкцию MERGE
, можно удалить устаревшие строки одновременно с обновлением строк в таблице. Чтобы сделать это, в синтаксис инструк- ции MERGE
включите предложение DELETE
со своим собственным предложением WHERE
.
Элементы синтаксиса:
- Предложение
INTO
— задает целевую таблицу, которая обновляется или в которую выполняется вставка. - Предложение
USING
— идентифицирует источник обновляемых или вставляемых данных; может быть таблицей, представлением или подзапросом. - Предложение
ON
— условие, по которому операцияMERGE
выполняет обновление или вставку. WHEN MATCHED
|WHEN NOT MATCHED
— предписывает серверу, как реагировать на результаты условия объединения
Более подробно изложено в документации Oracle Database 11g SQL Reference (Справочник по SQL для базы данных Oracle 11g).
Далее: Функции TO_YMINTERVAL и TO_DSINTERVAL