세이브포인트와 롤백
가까운 미래에 만기가 도래하는 정기예금 규모를 계속 살펴보려고 해요. 25만 달러를 초과하는 예금이 2008년 시장에서 나타난 결과에 가장 큰 영향을 미쳤습니다.
RCONHK12(>=250k)에는 향후 3개월 안에 만기가 도래하는 금액이, RCONHK13(>=250k)에는 3~12개월 사이에 만기 도래하는 금액이 저장됩니다. 이 값이 100만 달러를 초과하면 은행에 자금 부족이 생길 수 있어요. 보통 은행의 큰 고객들이라 다른 자산도 함께 인출할 수 있기 때문입니다. 반대로 50만 달러 미만이면 긍정적인 요인으로 볼 수 있어요.
제가 50만 달러를 초과하는 항목에 잘못된 값을 설정하는 바람에 코드에 몇 가지 실수가 생겼네요!
이 연습은 강의의 일부입니다
PostgreSQL에서의 트랜잭션과 오류 처리
연습 안내
- 트랜잭션 내부에서 총 만기 도래 예금이 50만 달러 미만이면
FIELD48을mature+로 설정하고, 세이브포인트matureplus_flag_set을 설정하세요. - 총 만기 도래 예금이 50만 달러 이상 100만 달러 이하이면
FIELD48을mature-로 설정한 뒤, 세이브포인트matureminus_flag_set을 설정하세요. - 총 만기 도래 예금이 10만 달러를 초과하면(100만 달러가 아니라)
FIELD48을mature--로 설정하세요. 여기서는0을 하나 "실수로" 빼먹는 상황입니다. mature-레코드를 설정한 직후 시점으로 되돌리기(UNDO) 한 다음, 예금 만기 일정이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--';