Exemple : Transfert protégé entre deux comptes

ExempleTransfert entre deux comptes en SQL standard sous PostgreSQL

1
BEGIN;
2
UPDATE Compte1 SET Solde=Solde+100 WHERE Num=1;
3
UPDATE Compte2 SET Solde=Solde-100 WHERE Num=1;
4
COMMIT;
5
/

ExempleTransfert entre deux comptes en PL/SQL sous Oracle

1
CREATE OR REPLACE PROCEDURE myTransfC1C2
2
IS
3
BEGIN
4
UPDATE Compte1 SET Solde=Solde+100 WHERE Num=1;
5
UPDATE Compte2 SET Solde=Solde-100 WHERE Num=1;
6
 COMMIT;
7
END;
8
/

ExempleTransfert entre deux comptes en VBA sous Access

1
Sub myTransfC1C2
2
BeginTrans
3
  CurrentDb.CreateQueryDef("", "UPDATE Compte1 SET Solde=Solde+100 WHERE Num=1").Execute
4
  CurrentDb.CreateQueryDef("", "UPDATE Compte2 SET Solde=Solde-100 WHERE Num=1").Execute
5
CommitTrans
6
End Sub

FondamentalTransfert protégé

Pour les trois exemples ci-avant le transfert est protégé au sens où soit les deux UPDATE seront exécutés , soit aucun.

En cas de panne pendant la transaction, le transfert sera annulé (ROLLBACK système), mais en aucun cas un des deux comptes ne pourra être modifié sans que l'autre le soit (ce qui aurait entraîné une perte ou un gain sur la somme des deux comptes).