Quel est l'effet de placer le commit comme celui-ci dans le programme ?
La documentation Oracle décrit COMMIT
comme :
Objectif
Utilisez le
COMMIT
déclaration pour mettre fin à votre transaction en cours et rendre permanents tous les changements effectués dans la transaction. Une transaction est une séquence d'instructions SQL qu'Oracle Database traite comme une seule unité. Cette instruction efface également tous les points de sauvegarde de la transaction et libère les verrous de transaction.
Si vous avez trois PROCEDURE
et chacun contient un COMMIT
instruction alors vous ne pouvez pas exécuter les trois puis, si une exception se produit dans une dernière, ROLLBACK
tous car les changements des deux premiers seront déjà COMMIT
ted.
En règle générale, vous ne devez pas utilisez COMMIT
dans une PROCEDURE
ou FUNCTION
mais devrait laisser à l'appelant le soin de COMMIT
la transaction afin qu'ils puissent regrouper plusieurs actions ensemble.
Il existe, bien sûr, des cas d'utilisation où vous voudrez enfreindre cette règle, mais vous devez considérer chaque cas séparément et prendre le temps de bien comprendre votre logique métier avant d'enfreindre cette règle afin de savoir ce qu'est COMMIT
ted dans chaque cas.
Dois-je effectuer cette transaction en tant que
AUTONOMOUS_TRANSACTION
?
Un cas d'utilisation est la journalisation - vous pouvez avoir une PROCEDURE
qui appelle une autre PROCEDURE
pour enregistrer les actions de l'utilisateur et, que l'action initiale réussisse ou échoue, vous souhaitez conserver un journal de l'action et vous assurer que le journal est COMMIT
ted. Dans ce cas, la journalisation PROCEDURE
doit être un AUTONOMOUS_TRANSACTION
et contiennent un COMMIT
et l'instruction d'appel ne devrait (probablement) avoir ni l'un ni l'autre.
Donc, si le COMMIT
d'une PROCEDURE
est toujours requis et est indépendant du fait que l'appelant COMMIT
s autres données puis faites la PROCEDURE
une AUTONOMOUS_TRANSACTION
. Si la PROCEDURE
s peuvent être regroupés, puis ROLLBACK
en tant que groupe, vous ne voulez pas les rendre AUTONOMOUS_TRANSACTION
s.