Efecto de los savepoints en los niveles de aislamiento
Ahora que has explorado los savepoints, vamos a usarlos para configurar una serie de transacciones que deban trabajar todas a partir de la misma instantánea inicial de los datos. REPEATABLE READ es un nivel de aislamiento que permite que cada sentencia dentro de la transacción vea los mismos datos sobre los que operó la primera sentencia, en lugar de los datos modificados por las sentencias anteriores.
Recientemente, la FFEIC permitió una reducción progresiva de los depósitos extranjeros, campo RCON2203 en miles, en el conjunto de datos. La nueva reducción es del 35% para más de 1.000 millones de dólares, del 25% para más de 500 millones y del 13% para más de 300 millones. Es posible ordenar estas sentencias para evitar reducir los datos más de una vez. Sin embargo, con REPEATABLE READ, las sentencias ven los datos anteriores a cualquier ajuste.
Este ejercicio forma parte del curso
Transacciones y manejo de errores en PostgreSQL
Instrucciones del ejercicio
- Inicia una transacción
REPEATABLE READ. - Reduce
RCON2203en un 35% si supera los 1.000 millones de dólares, en un 25% si supera los 500 millones o en un 13% si supera los 300 millones, con unSAVEPOINTdespués de cada paso. - Cierra la transacción.
- Suma el campo
RCON2203.
Ejercicio interactivo práctico
Prueba este ejercicio y completa el código de muestra.
-- 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