L4G >  Rollback  

Afficher tout Masquer tout

Rollback permet d'abandonner une transaction.

 

Syntaxe

   Rollback

 

Exemples

   # 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 : SUCCES = 0
    Return

 

Description

Rollback permet d'annuler une transaction, c'est-à-dire un ensemble d'opérations de mise à jour de fichiers et/ou de compteurs ainsi que des opération de verrouillage ayant débuté par l'instruction Trbegin.

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 Rollback ne peut être fait que par le traitement ou le sous-programmme ayant initié la transaction. C'est le cas en particulier pour les programmes de gestion d'erreur, de gestion d'interruption ou de déconnexion.

 

Remarques

En cas d'interruption d'un programme ou d'un sous-programme ayant initié une transaction un Rollback sera fait automatiquement. Ceci est valable dans les cas suivants :

  • fin du programme (instruction End ou fin physique du programme)
  • détection d'erreur et en l'absence de sous-programme de déroutement (Onerrgo).
  • interruption du traitement rendu interruptible par l'instruction Inter et en l'absence de sous-programme de déroutement (Onintgo).
  • déconnexion (click sur la croix, ou coupure accidentelle de la ligne)
  • arrêt par frappe de la touche <STOP>.

L'utilisateur sera averti de cette annulation.

Alors que l'instruction Commit est très rapide, Rollback est une opération qui peut être longue puisqu'il s'agit de "rejouer" à l'envers toutes les modifications apportées à la base de données. Il ne faut donc pas en faire un outil de programmation.

Rollback ne porte évidemment pas sur les variables et les fichiers séquentiels ouverts par Openo et Openio.

Exemple :
$TR : # Début de la transaction
Trbegin
If [V]COMP = 0
[V]COMP = [C]CPT
Endif
[C]CPT += 1
If fstat = 1 :
# En cas de verrouillage
Rollback : Goto TR : # de [C]CPT par un autre
Endif :
# adonix qui l'incremente
Commit
....

Supposons que [V]COMP soit nul au départ et que [C]CPT soit à 23. Si on n'a aucun problème on aura à la fin [V]COMP à 23 et [C]CPT à 24. Mais dans le cas où le même traitement a été lancé sur un autre poste, on aura à la fin [V]COMP à 23 et [C]CPT à 25.

Erreurs associées

Erreur

Description

ERRET (32)

La transaction a été initiée à un autre niveau.

PADTRAN (48)

Pas de transaction en cours.

 

Mots-clés associés

TRBEGIN - COMMIT - ONERRGO - ONINTGO - ACTIHGUP