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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top