Dans un environnement de contrôle de commitment, on fait suivre les instructions de mise à jour individuelles ou les groupes d’instructions de mise à jour par une instruction Commit ou Rollback. Comme DB2 retire automatiquement les mises à jour partiellement effectuées quand votre job se termine, vous devez indiquer explicitement
Les instructions SQL Commit et Rollback
quand toutes les mises à jour associées sont prêtes à être « committed » (c’està- dire rendues permanentes). Dans l’exemple précédent, l’instruction Commit suivrait immédiatement l’instruction Update, comme dans la séquence suivante :
Update Customer Set Discount = Discount + 0.001 Where Discount Is Not Null Commit
Si l’instruction Update s’exécute bien, dès que l’instruction Commit se termine, les changements apportés à la table Customer sont permanents. En substance, DB2 ajoute au journal une entrée disant que les mises à jour des lignes dont les images avant étaient précédemment sauvegardées, ont maintenant été terminées et « committed ».
On l’a vu, vous pouvez utiliser le contrôle de commitment pour grouper plusieurs instructions de mise à jour dans une seule transaction (aussi appelée une unité logique de travail). Tous les changements de base de données pour des instructions Update, Insert et Delete dans une transaction peuvent être désormais garantis pour une exécution en mode « tout ou rien » : c’est-à-dire que les changements se feront tous, ou pas du tout. Revenons à notre transaction de banque classique. Avec le contrôle de commitment, la séquence d’instructions de base (en ignorant le traitement des erreurs) serait :
Update Saving Set Balance = Balance – 100.00 Where AccID = 123987
Update Checking Set Balance = Balance + 100.00 Where AccID = 12387
Commit
Si vous décidez d’écarter les mises à jour qui n’ont pas encore été « committed », vous pouvez exécuter une instruction Rollback qui, en SQL, est tout simplement
Rollback
Si vous le souhaitez, vous pouvez ajouter le mot-clé Hold à Commit ou Rollback, comme dans l’exemple suivant :
Commit Hold
Avec Hold, toutes les instructions SQL préparées sont gardées (sans Hold, elles disparaissent quand on exécute une instruction Commit ou Rollback). De plus, le mot-clé Hold évite de libérer des verrous de table. Vous pouvez aussi ajouter le mot-clé Hold pour éviter de fermer des curseurs SQL imbriqués. Mais, le plus souvent, il existe une meilleure solution pour garder les curseurs ouverts : coder l’option With Hold sur l’instruction Declare Cursor elle-même.
À noter qu’il n’existe pas d’instruction SQL « begin transaction ». En effet, DB2 commence toujours une transaction de manière implicite – soit quand vous démarrez un environnement de contrôle de commitment, soit quand vous terminez la transaction précédente par une instruction Commit ou Rollback.
Lorsque des instructions Commit et Rollback sont imbriquées dans des programmes SQL, les points principaux à considérer sont les suivants : où placer ces instructions dans la logique du programme et quel est l’impact d’un commit ou rollback sur les autres ressources, telles que des curseurs ouverts. On l’a vu, vous devez vous efforcer de coder Commit et Rollback au(x) point(s) de l’application où vous avez terminé (avec ou sans succès) toutes les instructions SQL impliquées dans une transaction.
Téléchargez cette ressource

Sécurité et conformité du Cloud
Ce guide vous permettra de revisiter vos connaissances et repenser votre posture en matière de sécurité et de conformité dans le cloud. Vous découvrirez comment mettre en place et déployer une stratégie de sécurité fluide et transparente. Un guide essentiel pour sécuriser votre cloud de façon pérenne.
Les articles les plus consultés
Les plus consultés sur iTPro.fr
- Quel impact d’une cyberguerre sur les organisations ?
- Menaces cyber sur le secteur énergétique européen !
- Les stratégies IA pour la survie de l’entreprise !
- Protégez l’accès non authentifié de vos réunions
- Télécommunications et durabilité : les défis d’une transition verte dans un secteur en mutation
