Effetto dei savepoint sui livelli di isolamento
Ora che hai esplorato i savepoint, usali per impostare una serie di transazioni che devono tutte partire dallo stesso snapshot iniziale dei dati. REPEATABLE READ è un livello di isolamento che consente di far sì che ogni istruzione all'interno della transazione veda gli stessi dati su cui ha operato la prima istruzione, invece dei dati risultanti dall'istruzione o dalle istruzioni precedenti.
Di recente, la FFEIC ha consentito una riduzione progressiva dei depositi esteri, campo RCON2203 in migliaia, nel dataset. La nuova riduzione è del 35% per importi superiori a 1 miliardo di dollari, del 25% per importi superiori a 500 milioni di dollari e del 13% per importi superiori a 300 milioni di dollari. È possibile ordinare queste istruzioni per evitare di ridurre i dati più di una volta. Tuttavia, con REPEATABLE READ le istruzioni vedono i dati prima di qualsiasi correzione.
Questo esercizio fa parte del corso
Transazioni e gestione degli errori in PostgreSQL
Istruzioni dell'esercizio
- Avvia una transazione
REPEATABLE READ. - Riduci
RCON2203del 35% se supera 1 miliardo di dollari, del 25% se supera 500 milioni di dollari o del 13% se supera 300 milioni di dollari, con unSAVEPOINTdopo ciascuna operazione. - Chiudi la transazione.
- Calcola il totale del campo
RCON2203.
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
-- 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