Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle 11g :en PL/SQL, existe-t-il un moyen d'obtenir des informations sur les lignes insérées et mises à jour après l'instruction MERGE DML ?

Il n'y a pas de moyen intégré d'obtenir des comptes d'insertion et de mise à jour séparés, non. SQL%ROWCOUNT vous indiquerait le nombre de lignes fusionnées, comme vous le savez probablement déjà, mais il n'y a pas d'équivalent pour obtenir des valeurs séparées pour les insertions et les mises à jour.

Cet article d'Adrian Billington montre un moyen d'obtenir les informations en incluant un appel de fonction dans la fusion, ce qui peut ajouter un peu de surcharge.

Il existe une astuce similaire, et peut-être plus simple, de MichaelS sur les forums Oracle , dont je ne peux pas m'attribuer le mérite non plus, bien sûr. Je suis tenté de le reproduire ici mais je ne sais pas si c'est autorisé, mais essentiellement il utilise sys_context pour maintenir un décompte, à peu près de la même manière que la solution d'Adrian l'a fait avec une variable de package. J'utiliserais celui-là, car il est plus propre et je pense qu'il est plus facile à suivre et à entretenir.

Toujours dangereusement proche d'une réponse en lien uniquement mais je ne veux pas non plus plagier le travail des autres...