НачатьНачать бесплатно

Точки сохранения и откат транзакций

Продолжаем анализировать объём срочных депозитов с приближающимися сроками погашения. Депозиты на сумму свыше 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--';
Редактировать и запускать код