Oracle PL/SQL оператор MERGE

В этом учебном пособии вы узнаете, как использовать оператор MERGE в Oracle PL/SQL с синтаксисом и примерами.

Описание

Oracle PL/SQL оператор MERGE позволяет выбрать строки из одной таблицы для обновления или вставки в другую таблицу. Решение о том, обновлять или вставлять данные в целевую таблицу, основывается на условии в предложении ON. Оператор MERGE - это удобный способ совместить как минимум две операции. Это позволяет избежать использования нескольких DML операторов INSERT и UPDATE.
У вас должны быть объектные привилегии INSERT и UPDATE для целевой таблицы и привилегии SELECT для исходной таблицы.

Синтаксис

Синтаксис Oracle PL/SQL оператора MERGE:

MERGE [hint] INTO [schema .] table_A [t_alias] USING [schema .]
{ table | view | subquery } [t_alias] ON ( condition )
WHEN MATCHED THEN merge_update_clause
WHEN NOT MATCHED THEN merge_insert_clause;

Параметры или аргумент

schema
схема базы данных.
INTO
используйте оператор INTO, чтобы указать целевую таблицу, которую вы обновляете или вставляете данные.
table_A
целевая таблица.
t_alias
алиас (псевдоним).
USING { table | view | subquery }
указывает источник данных, из которого нужно обновить или вставить данные в table_A. Это может быть таблица, представление или результат подзапроса.
ON ( condition )
указывает условие, при котором операция MERGE либо обновляет, либо вставляет данные. Для каждой строки table_A, для которой выполняется условие поиска, Oracle обновляет строку, используя соответствующие данные из исходной таблицы. Если условие не выполняется ни для одной строки, Oracle вставляет в table_A данные на основе соответствующей строки исходной таблицы.
WHEN MATCHED | NOT MATCHED
Используйте эти предложения, чтобы указать Oracle, как реагировать на результаты условия соединения в предложении ON. Вы можете указать эти два предложения в любом порядке.
merge_update_clause
определяет новые значения столбцов table_A. Oracle выполняет это обновление, если условие предложения ON истинно. Если предложение обновления выполняется, то активируются все триггеры обновления, определенные в table_A.
Пример merge_update_clause: UPDATE SET column = { expr | DEFAULT } [, column = { expr | DEFAULT }]

Ограничения на обновление View

  • Вы не можете указать DEFAULT при обновлении View.
  • Вы не можете обновить столбец, на который есть ссылка в условии ON.
merge_insert_clause
определяет значения для вставки в столбец table_A, если условие предложения ON ложно. Если предложение вставки выполняется, то активируются все триггеры вставки, определенные в table_A.
Пример merge_insert_clause: INSERT ( column [, column]... ) VALUES ( expr [, expr]... )

Ограничение на слияние с View

  • Вы не можете указать DEFAULT при обновлении View.

Примеры Oracle PL/SQL MERGE

В следующем примере создается таблица bonuses в схеме oe с полем bonus равным 100, по умолчанию.

Затем вставляем в таблицу bonuses всех сотрудников, совершивших продажи (на основе столбца sales_rep_id таблицы oe.orders).

Наконец, менеджер по персоналу решает, что все сотрудники должны получить премию. Тем, кто не совершил продажи, выплачивается бонус в размере 1% от зарплаты. Тем, кто уже совершил продажи, бонус увеличивается на 1% от зарплаты. Оператор MERGE реализует эти изменения за один шаг: