เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

Savepoints และการ Rolling Back

มาต่อกันที่เรื่องปริมาณเงินฝากประจำที่กำลังจะครบกำหนดในอนาคตอันใกล้ โดยเฉพาะรายที่มีมูลค่าเกิน 250K ซึ่งส่งผลกระทบมากที่สุดต่อสถานการณ์ที่เกิดขึ้นในช่วงวิกฤตตลาดปี 2008

RCONHK12 (>=250K) เก็บข้อมูลเงินฝากที่ครบกำหนดภายใน 3 เดือนข้างหน้า และ RCONHK13 (>=250K) เก็บข้อมูลที่ครบกำหนดระหว่าง 3 ถึง 12 เดือน หากมูลค่าเหล่านี้สูงกว่า 1 ล้านดอลลาร์ อาจทำให้ธนาคารขาดสภาพคล่อง เนื่องจากลูกค้ากลุ่มนี้มักเป็นรายใหญ่ที่อาจถอนสินทรัพย์อื่นออกไปด้วย ในทางกลับกัน หากมูลค่าต่ำกว่า 500K ถือเป็นปัจจัยบวก

โค้ดของฉันมีข้อผิดพลาดบางจุด เพราะตั้งค่าไม่ถูกต้องสำหรับรายที่มีมูลค่าเกิน 500K!

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

Transactions and Error Handling in PostgreSQL

ดูคอร์ส

คำแนะนำการฝึกหัด

  • ภายใน transaction ให้ตั้งค่า FIELD48 เป็น mature+ เมื่อยอดเงินฝากที่ครบกำหนดรวมน้อยกว่า 500,000 ดอลลาร์ แล้วตั้ง savepoint ชื่อ matureplus_flag_set
  • ตั้งค่า FIELD48 เป็น mature- เมื่อยอดเงินฝากที่ครบกำหนดรวมอยู่ระหว่าง 500,000 ถึง 1 ล้านดอลลาร์ แล้วตั้ง savepoint ชื่อ matureminus_flag_set
  • ตั้งค่า FIELD48 เป็น mature-- เมื่อยอดเงินฝากที่ครบกำหนดรวมมากกว่า 100,000 ดอลลาร์ (ไม่ใช่ 1 ล้านดอลลาร์) — "โดยไม่ได้ตั้งใจ" ลืมเติมเลข 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--';
แก้ไขและรันโค้ด