Точки сохранения и откат транзакций
Продолжаем анализировать объём срочных депозитов с приближающимися сроками погашения. Депозиты на сумму свыше 250 тыс. долларов оказали наибольшее влияние на результаты, наблюдавшиеся во время рыночного кризиса 2008 года.
RCONHK12 (>=250K) содержит депозиты, срок погашения которых наступает в течение следующих трёх месяцев, а RCONHK13 (>=250K) — депозиты со сроком погашения от 3 до 12 месяцев. Если суммарный объём таких депозитов превышает 1 миллион долларов, это может привести к нехватке средств в банке, поскольку речь идёт, как правило, о крупных клиентах, способных также вывести другие активы. И наоборот — если суммарный объём меньше 500 тыс. долларов, это является положительным фактором.
В коде допущено несколько ошибок: для депозитов свыше 500 тысяч долларов задано неверное значение!
Это упражнение является частью курса
Транзакции и обработка ошибок в PostgreSQL
Инструкции к упражнению
- В рамках транзакции установите для
FIELD48значениеmature+, если общий объём срочных депозитов меньше 500 тысяч долларов, и создайте точку сохраненияmatureplus_flag_set. - Установите для
FIELD48значениеmature-, если общий объём срочных депозитов составляет от 500 тысяч до 1 миллиона долларов, затем создайте точку сохраненияmatureminus_flag_set. - Установите для
FIELD48значениеmature--, если общий объём срочных депозитов превышает 100 тысяч долларов (не 1 миллион) — «случайно» пропустив один ноль. - Выполните откат к моменту сразу после установки записей
mature-и подсчитайте количество банков с расписанием погашения депозитовmature--.
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
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--';