CommencerCommencer gratuitement

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

Afficher le cours

Instructions

  • Démarrez une transaction REPEATABLE READ.
  • Réduisez RCON2203 de 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 un SAVEPOINT aprè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 
Modifier et exécuter le code