Exemple : Transfert protégé entre deux comptes

ExempleTransfert entre deux comptes en SQL standard sous PostgreSQL

CTRL+C pour copier, CTRL+V pour coller
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
/
BEGIN;
UPDATE Compte1 SET Solde=Solde+100 WHERE Num=1;
UPDATE Compte2 SET Solde=Solde-100 WHERE Num=1;
COMMIT;
/

ExempleTransfert entre deux comptes en PL/SQL sous Oracle

CTRL+C pour copier, CTRL+V pour coller
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
/
CREATE OR REPLACE PROCEDURE myTransfC1C2
IS
BEGIN
 UPDATE Compte1 SET Solde=Solde+100 WHERE Num=1;
 UPDATE Compte2 SET Solde=Solde-100 WHERE Num=1;
 COMMIT;
END;
/

ExempleTransfert entre deux comptes en VBA sous Access

CTRL+C pour copier, CTRL+V pour coller
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
Sub myTransfC1C2
 BeginTrans
  CurrentDb.CreateQueryDef("", "UPDATE Compte1 SET Solde=Solde+100 WHERE Num=1").Execute
  CurrentDb.CreateQueryDef("", "UPDATE Compte2 SET Solde=Solde-100 WHERE Num=1").Execute
 CommitTrans
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).