ROLLBACK |
Rollbackpermet d'abandonner une transaction.
Rollback
# Transaction : on débite un compte CPT_D et crédite un compte CPT_C
# d'une même valeur TRANSFERT. Au retour du sous-programme,
# SUCCES=1 si tout s'est bien passé, et SUCCES=0 sinon.
#
TRANSFERT_SOMME
#
# Début de transaction
Trbegin [CPT]
#
# On débite le premier compte
Readlock [CPT]NOCPT=CPT_D
If fstat : Goto ABANDON : Endif
[CPT]SOLDE -= TRANSFERT
Rewrite [CPT]
If fstat : Goto ABANDON : Endif
#
# On crédite le second compte
Readlock [CPT]NOCPT = CPT_C
If fstat : Goto ABANDON : Endif
[CPT]SOLDE += TRANSFERT
Rewrite [CPT]
If fstat : Goto ABANDON : Endif
#
# Validation de la transaction et retour.
Commit : SUCCES = 1
Return
#
# Annulation de la transaction et retour en cas d'erreur
ABANDON
Rollback
Return
Rollback
Les tables sont restaurées dans l'état où elles étaient avant l'initiation de la transaction puis refermées et tous les verrous sont levés. Seuls les verrous posés sur des symboles avant le début de la transaction ne le seront pas. La transaction n'est pas inscrite dans le fichier de journalisation - le cas échéant.
Un Rollbackne peut être fait que par le traitement ou le sous-programmme ayant initié latransaction. C'est le cas en particulier pour les programmes de gestiond'erreur, de gestion d'interruption ou de déconnexion.
En cas d'interruption d'un programme ou d'un sous-programme ayant initié unetransaction un Rollbacksera fait automatiquement. Ceci est valable dans les cas suivants :
L'utilisateur sera averti de cette annulation.
Alors que l'instruction Commit est très rapide,
Rollbackne porte évidemment pas sur les variables et les fichiers séquentiels ouvertspar Openo et Openio.
Exemple :
$TR : # Début de latransaction
Trbegin
If [V]COMP = 0
[V]COMP = [C]CPT
Endif
[C]CPT += 1
If fstat = 1 :# Encas de verrouillage
Rollback
Endif :# adonixqui l'incremente
Commit
....
Supposons que [V]COMP soit nul au départet que [C]CPT soit à 23. Si on n'a aucun problème on aura à la fin [V]COMP à 23et [C]CPT à 24. Mais dans le cas où le même traitement a été lancé sur un autreposte, on aura à la fin [V]COMP à 23 et [C]CPT à 25.
ERRET(32) | Latransaction a été initiée à un autre niveau. |
PADTRAN(48) | Pasde transaction en cours. |
TRBEGIN - COMMIT - ONERRGO - ONINTGO - ACTIHGUP
Adonix X3(r) L4G |