RETURNING
Оператор MERGE
может содержать конструкцию RETURNING
для возвращения значений добавленных, модифицируемых или удаляемых строк.В RETURNING
могут быть указаны любые столбцы из целевой таблицы (обновляемого представления) и выражения.
Возвращаемые значения содержат изменения, произведённые в триггерах BEFORE
.
Имена столбцов могут быть уточнены с помощью префиксов NEW
и OLD
для определения, какое именно значение столбца вы хотите получить до модификации или после.
Вместо списка столбцов может быть указана звёздочка (*), в этом случае будут возвращены все столбцы целевой таблицы.Префиксы NEW
и OLD
могут быть использованы совместно со звёздочкой.
Для предложений WHEN MATCHED UPDATE
и MERGE WHEN NOT MATCHED
неуточненные имена столбцов или уточнённые именамитаблиц или их псевдонимами понимаются как столбцы с префиксом NEW
, для предложений MERGE WHEN MATCHED DELETE
— с префиксом OLD
.
Note
|
|
MERGE
с предложением RETURNING
Немного модифицируем наш предыдущий пример, чтобы он затрагивал только одну строку, и добавим в него инструкцию RETURNING
возвращающего старое и новое количество товара и разницу между этими значениями.
MERGE INTO PRODUCT_IVENTORY AS TARGET
USING (
SELECT
SL.ID_PRODUCT,
SUM(SL.QUANTITY)
FROM SALES_ORDER_LINE SL
JOIN SALES_ORDER S ON S.ID = SL.ID_SALES_ORDER
WHERE S.BYDATE = CURRENT_DATE
AND SL.ID_PRODUCT = :ID_PRODUCT
GROUP BY 1
) AS SRC(ID_PRODUCT, QUANTITY)
ON TARGET.ID_PRODUCT = SRC.ID_PRODUCT
WHEN MATCHED AND TARGET.QUANTITY - SRC.QUANTITY <= 0 THEN
DELETE
WHEN MATCHED THEN
UPDATE SET
TARGET.QUANTITY = TARGET.QUANTITY - SRC.QUANTITY,
TARGET.BYDATE = CURRENT_DATE
RETURNING OLD.QUANTITY, NEW.QUANTITY, SRC.QUANTITY
INTO :OLD_QUANTITY, :NEW_QUANTITY, :DIFF_QUANTITY