Oracle merge delete: BASE — MERGE Statement Enhancements in Oracle Database 10g

Объяснение инструкции MERGE в SQL

Улучшение статьи

Сохранить статью

  • Уровень сложности:
    Hard
  • Последнее обновление:
    09 Сен, 2021
  • Читать
  • Обсудить
  • Улучшить статью

    Сохранить статью

    Предварительное условие — Оператор MERGE
    Поскольку оператор MERGE в SQL, как обсуждалось ранее в предыдущем посте, представляет собой комбинацию трех операторов INSERT, DELETE и UPDATE. Итак, если есть Исходная таблица и Целевая таблица , которые должны быть объединены, то с помощью оператора MERGE все три операции (INSERT, UPDATE, DELETE) могут быть выполнены одновременно.

    Простой пример пояснит использование инструкции MERGE.

    Пример:
    Предположим, что есть две таблицы: 

    • PRODUCT_LIST , которая содержит текущие сведения о доступных продуктах с полями P_ID, P_NAME и P_PRICE, соответствующими идентификатору, названию и цене каждого продукт.
    • UPDATED_LIST , которая представляет собой таблицу, содержащую новые сведения о продуктах, доступных с полями P_ID, P_NAME и P_PRICE, соответствующими идентификатору, названию и цене каждого продукта.

    Задача состоит в том, чтобы обновить сведения о продуктах в PRODUCT_LIST в соответствии с UPDATED_LIST.

    Решение  
    Теперь, чтобы лучше объяснить этот пример, давайте разделим его на этапы.

    Шаг 1: Распознайте ЦЕЛЬ и ИСТОЧНИК таблицы  
    Таким образом, в этом примере, поскольку предлагается обновить продукты в PRODUCT_LIST в соответствии с UPDATED_LIST, следовательно, PRODUCT_LIST будет действовать как TARGET, а UPDATED_LIST будет действовать как таблица SOURCE.

    Шаг 2: Распознайте операции, которые необходимо выполнить.  
    Теперь, как видно, есть три несоответствия между таблицей TARGET и SOURCE, а именно: 

    1. Стоимость КОФЕ в TARGET составляет 15,00, а в SOURCE – 25,00

     СПИСОК_ПРОДУКТОВ
    102 КОФЕ 15. 00
          ОБНОВЛЕНО_СПИСОК
    102 КОФЕ 25.00 

    2. В SOURCE нет продукта BISCUIT, но он есть в TARGET

     PRODUCT_LIST
    103 BISCUIT 20.00 

    3. Продукта CHIPS нет в TARGET, но он есть в SOURCE

     UPDATED_LIST
    104 ЧИПЫ 22.00 

    Следовательно, в МИШЕНИ необходимо выполнить три операции по указанным выше несоответствиям. Это:

    1. Операция ОБНОВЛЕНИЕ

     102 КОФЕ 25.00 

    2. Операция DELETE

     103 ПЕЧЕНЬЕ 20.00 

    3. Операция INSERT

     104 CHIPS 22.00 

    2 9 Запрос SQL 3:

    Примечание. Обратитесь к этому сообщению за синтаксисом оператора MERGE.

    SQL-запрос для выполнения вышеуказанных операций с помощью оператора MERGE :

    3 check for change in P_NAME or P_PRICE */

         ON (TARGET.P_ID = SOURCE.P_ID)

         WHEN Соответствует

    и target.p_name <> source.p_name

    или Target.p_price <> source.p_price или .0115

     

         /* Update the records in TARGET */

         THEN UPDATE

              SET TARGET. P_NAME = SOURCE. P_NAME,

    Target.p_price = Source.p_price

    /* 2. Выполнение

    /* 2.0114 INSERT operation */

     

         /* When no records are matched with TARGET table

            Then insert the записи в цель таблица */

         КОГДА НЕ 1 СООТВЕТСТВУЕТ0115 Цель

    Затем Вставка (P_ID, P_NAME, P_PRICE)

    Значения (Source. prise.prise.poursire.pround. /* 3. Выполнение Удалить Операция* /

    /* , когда NO Записки соответствуют .0115 with SOURCE table

            Then delete the records from the target table */

         WHEN NOT MATCHED по Источник

    Затем Удалить

    /* Конец из /* Конец из /* 0115 ОБЪЕДИНЕНИЕ */

    /* Выбор цели and the Source */

    MERGE PRODUCT_LIST AS TARGET

         USING UPDATE_LIST AS SOURCE

     

         /* 1. Performing the UPDATE операция */

     

         /* Если P_ID равен то же, 9 0 1 4

    Вывод:

     PRODUCT_LIST
    P_ID P_NAME P_PRICE
    101 ЧАЙ 10. 00
    102 КОФЕ 25.00
    104 CHIPS 22.00 

    Таким образом, мы можем выполнять все эти три основных оператора в SQL вместе с помощью оператора MERGE.

    Примечание: В синтаксисе MERGE можно использовать любое имя, кроме целевого и исходного. Они используются только для того, чтобы дать вам лучшее объяснение.

    Статьи по теме

    Использование MERGE в SQL Server для одновременной вставки, обновления и удаления — Abbey Code

    Использование MERGE в SQL Server для одновременной вставки, обновления и удаления

    В типичном приложении для хранения данных довольно часто во время цикла ETL необходимо выполнять операции INSERT, UPDATE и DELETE в таблице target путем сопоставления записей из таблицы source . Например, таблица измерения продуктов содержит информацию о продуктах, и вам необходимо синхронизировать эту таблицу с последней информацией о продуктах из исходной таблицы. Вам нужно будет написать отдельные операторы INSERT, UPDATE и DELETE, чтобы обновить целевую таблицу с обновленным списком продуктов или выполнить поиск. Хотя на первый взгляд это кажется простым, это становится громоздким, когда вы делаете это очень часто или на нескольких таблицах, даже при таком подходе производительность значительно снижается. В этом совете мы рассмотрим, как использовать оператор MERGE и сделать это за один проход.

    Начиная с SQL Server 2008, вы можете использовать команду MERGE для выполнения этих операций в одной инструкции. Эта новая команда похожа на команду Oracle UPSERT (объединение слов UPDATE и INSERT.), где она вставляет несуществующие строки и обновляет существующие строки. С введением команды MERGE разработчики могут более эффективно обрабатывать распространенные сценарии работы с хранилищами данных, например проверять, существует ли строка, а затем выполнять INSERT, UPDATE или DELETE.

    Оператор MERGE в основном объединяет данные из исходного результирующего набора в целевую таблицу на основе заданного вами условия и того, существуют ли данные из источника в целевом объекте или нет. Новая команда SQL объединяет последовательность условных команд INSERT, UPDATE и DELETE в одном атомарном операторе в зависимости от наличия записи. Новая команда MERGE выглядит следующим образом:

    Оператор MERGE в основном работает как отдельные операторы INSERT, UPDATE и DELETE внутри одного оператора. Вы указываете набор записей «Исходный» и таблицу «Цель», а также соединение между ними. Затем вы указываете тип модификации данных, которая должна происходить, когда записи между двумя данными совпадают или не совпадают. MERGE очень полезен, особенно когда речь идет о загрузке таблиц хранилища данных, которые могут быть очень большими и требуют выполнения определенных действий при наличии или отсутствии строк.

    Как начать работу с командой SQL Server Merge?

    Команда SQL Server MERGE представляет собой комбинацию команд INSERT, UPDATE и DELETE, объединенных в одну инструкцию. Вот как начать работу с командой SQL Server MERGE:

    1. Начните с определения целевой таблицы, которая будет использоваться в логике.

    2. Затем определите исходную таблицу, которая будет использоваться в логике.