La détermination d'un résultat de l'instruction MERGE Oracle SQL
Question
Suivi cette question
(version similaire de l'ancien lien) fonctionne dans SQL Server 2008, cependant, Oracle me donne du mal:
MERGE INTO wdm_test
USING ( select '10000000000000000000000000000000' Guid from DUAL ) val
ON ( wdm_test.Guid = val.Guid )
WHEN MATCHED THEN UPDATE SET test_column = null
WHEN NOT MATCHED THEN
INSERT (Guid, test_column)
VALUES ('10000000000000000000000000000000', null)
OUTPUT $action;
SQL Error: ORA-00933: SQL command not properly ended
ne prend pas en charge Oracle OUTPUT $action;
? Sinon, est-il une alternative?
La solution
L'instruction MERGE ne produit pas les résultats, et ne supporte pas la clause RETURNING
.
Cependant, ce que vous pouvez faire est de drapeau les enregistrements qui sont touchés . Quelque chose comme:
when matched update set .... merge_status = 'U'
when not matched insert ( ...., merge_status, ... ) values ( ...., 'I', .... )
Ceci, bien sûr, exige que vous avez une colonne supplémentaire pour capturer l'état de fusion - qui n'est pas toujours souhaitable (surtout quand vous avez seulement besoin de ces informations de manière transitoire, par exemple pour vérifier les résultats de la fusion).
Malheureusement, à ma connaissance, c'est le meilleur que vous pouvez faire.