IniziaInizia gratis

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

Visualizza il corso

Istruzioni dell'esercizio

  • Avvia una transazione REPEATABLE READ.
  • Riduci RCON2203 del 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 un SAVEPOINT dopo 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 
Modifica ed esegui il codice