Savepoints 與回滾
繼續思考未來即將到期的定期存款金額。超過 250K 的那一批,對 2008 年市場期間觀察到的結果影響最大。
RCONHK12(>=250k)儲存接下來 3 個月內到期的金額,RCONHK13(>=250k)則是儲存 3 到 12 個月之間到期的金額。若這些金額高於 $1 million,可能導致銀行資金短缺,因為這些通常是銀行的大客戶,也可能會同時抽走其他資產。相反地,若低於 $500K,會有正面影響。
我在程式碼裡犯了幾個錯,把超過 $500 thousand 的值設錯了!
本練習屬於課程
PostgreSQL 的交易與錯誤處理
練習說明
- 在一個交易中,若總到期存款低於 $500 thousand,將
FIELD48設為mature+,並設定 savepointmatureplus_flag_set。 - 若總到期存款介於 $500 thousand 與 $1 million 之間,將
FIELD48設為mature-,接著設定 savepointmatureminus_flag_set。 - 若總到期存款大於 $100 thousand(不是 $1 million),將
FIELD48設為mature--——因為「不小心」少打一個0。 - 往回復原到我們剛設定完
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--';