RETURNING
L’instruction MERGE
peut contenir une construction RETURNING
pour retourner les valeurs des lignes ajoutées, modifiées ou supprimées.Toutes les colonnes de la table cible (la vue mise à jour) et les expressions peuvent être spécifiées dans RETURNING
.
Les valeurs de retour contiennent les changements effectués dans les déclencheurs BEFORE
.
Les noms de colonnes peuvent être préfixés avec NEW
et OLD
pour spécifier quelle valeur de colonne vous voulez avant ou après la modification.
Un astérisque (*) peut être spécifié à la place d’une liste de colonnes, auquel cas toutes les colonnes de la table cible seront retournées.Les préfixes NEW
et OLD
peuvent être utilisés en conjonction avec un astérisque.
Pour les clauses WHEN MATCHED UPDATE
et MERGE WHEN NOT MATCHED
, les noms de colonne non spécifiés ou spécifiés parou leurs alias sont compris comme des colonnes préfixées avec NEW
, pour les clauses MERGE WHEN MATCHED DELETE
- avec le préfixe OLD
.
Note
|
|
MERGE
avec la clause RETOURNEMENT
.Modifions un peu notre exemple précédent pour qu’il ne concerne qu’une seule ligne, et ajoutons une instruction RETURNING
qui renvoie l’ancienne et la nouvelle quantité de l’article et la différence entre ces valeurs.
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