Savepoint e rollback
Continuiamo a ragionare sull’ammontare dei depositi a scadenza nel prossimo futuro. Quelli oltre i 250K hanno avuto il maggior impatto sugli esiti osservati durante il mercato del 2008.
RCONHK12 (>=250k) memorizza quelli in scadenza nei prossimi tre mesi e RCONHK13 (>=250k) quelli in scadenza tra 3 e 12 mesi. Se superano 1 milione di dollari, possono causare una carenza di fondi in banca, dato che si tratta in genere di clienti più grandi che potrebbero anche ritirare altri asset. C’è invece un fattore positivo se sono inferiori a 500K.
Ho commesso alcuni errori nel mio codice impostando il valore sbagliato per quelli oltre 500 mila dollari!
Questo esercizio fa parte del corso
Transazioni e gestione degli errori in PostgreSQL
Istruzioni dell'esercizio
- All’interno di una transazione imposta
FIELD48amature+se il totale dei depositi in scadenza è inferiore a 500 mila dollari e imposta un savepointmatureplus_flag_set. - Imposta
FIELD48amature-se il totale dei depositi in scadenza è tra 500 mila e 1 milione di dollari, poi imposta un savepointmatureminus_flag_set. - Imposta
FIELD48amature--se il totale dei depositi in scadenza è maggiore di 100 mila dollari (non 1 milione) — “per errore” omettendo uno0. - Annulla fino a subito dopo aver impostato i record
mature-e conta tutte le banche con un piano di scadenza dei depositimature--.
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
BEGIN;
-- Update FIELD48 to indicate a positive maturity rathing when less than $500 thousand.
UPDATE ffiec_reci
SET ___ = '___'
WHERE RCONHK12 + RCONHK13 < 500000;
-- Set a savepoint
SAVEPOINT ___;
-- Update FIELD48 to indicate a negative maturity rathing when between $500 thousand and $1 million.
UPDATE ffiec_reci
___
WHERE RCONHK12 + RCONHK13 BETWEEN ___ AND ___;
-- Set a savepoint
SAVEPOINT ___;
-- Accidentailly update FIELD48 to indicate a double negative maturity rating when more than 100K
UPDATE ffiec_reci
SET ___ = '___'
WHERE RCONHK12 + RCONHK13 > 100000;
-- Rollback to before the last mistake
ROLLBACK TO ___;
-- Select count of records with a double negative indicator
SELECT count(FIELD48)
from ffiec_reci
WHERE FIELD48 = 'mature--';