Effet d’un savepoint sur les niveaux d’isolation
Maintenant que vous avez exploré les savepoints, utilisons-les pour mettre en place une série de transactions qui doivent toutes travailler à partir du même instantané initial des données. REPEATABLE READ est un niveau d’isolation qui permet de fournir à chaque instruction dans la transaction les mêmes données que celles sur lesquelles la première instruction a opéré, plutôt que les données modifiées par la ou les instructions précédentes.
Récemment, la FFEIC a autorisé une réduction progressive des dépôts étrangers, champ RCON2203 en milliers, dans l’ensemble de données. La nouvelle réduction est de 35 % au-delà de 1 milliard de dollars, 25 % au-delà de 500 millions de dollars et 13 % au-delà de 300 millions de dollars. Il est possible d’ordonner ces instructions pour éviter de réduire les données plus d’une fois. Cependant, avec REPEATABLE READ, les instructions voient les données telles qu’elles étaient avant tout ajustement.
Cet exercice fait partie du cours
Transactions et gestion des erreurs dans PostgreSQL
Instructions
- Démarrez une transaction
REPEATABLE READ. - Réduisez
RCON2203de 35 % si supérieur à 1 milliard de dollars, de 25 % si supérieur à 500 millions de dollars, ou de 13 % si supérieur à 300 millions de dollars, avec unSAVEPOINTaprès chaque étape. - Fermez la transaction.
- Totalisez le champ
RCON2203.
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
-- Create a new transaction with a repeatable read isolation level
___ TRANSACTION ISOLATION LEVEL ___ ___;
-- Update records with a 35% reduction if greater than 1000000000
UPDATE ffiec_reci
SET ___ = CAST(___ AS FLOAT) * .65
WHERE CAST(RCON2203 AS FLOAT) > 1000000000;
___ million;
-- Update records with a 25% reduction if greater than 500000000
UPDATE ___
___ ___ = CAST(___ AS FLOAT) * .75
___ CAST(RCON2203 AS FLOAT) ___ 500000000;
SAVEPOINT five_hundred;
-- Update records with a 13% reduction if greater than 300000000
___ ffiec_reci
___ ___ = CAST(___ AS FLOAT) * .87
___ CAST(___ AS FLOAT) ___ 300000000;
SAVEPOINT three_hundred;
-- Commit the transaction
___;
-- Select SUM the RCON2203 field
SELECT ___(CAST(RCON2203 AS FLOAT))
FROM ffiec_reci