การ Rollback ด้วย Savepoint
ต่อเนื่องจากแบบฝึกหัดที่แล้ว พบว่าธนาคารที่มี MMDA มากกว่า 6 ล้านดอลลาร์มีโอกาสรอดพ้นจากภาวะถดถอยสูงกว่าธนาคารที่มี MMDA ระหว่าง 5 ถึง 6 ล้านดอลลาร์ถึงสองเท่า โค้ดตัวอย่างนี้มีข้อผิดพลาดอยู่ ต้องทำการ rollback ไปยัง savepoint เพื่อรักษาความถูกต้องของข้อมูล
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Transactions and Error Handling in PostgreSQL
คำแนะนำการฝึกหัด
- ภายใน transaction ให้ตั้งค่า
FIELD48เป็น'MMDA+'โดยมีเงื่อนไขว่าRCON6810(จำนวนเงิน MMDA) มากกว่า 6 ล้านดอลลาร์ - กำหนด savepoint ชื่อ
mmdaplus_flag_set - ตั้งค่า
FIELD48เป็น'MMDA+'โดยมีเงื่อนไขว่าRCON6810(จำนวนเงิน MMDA) มากกว่า 5 ล้านดอลลาร์ (ส่วนนี้คือข้อผิดพลาด) - ย้อนกลับไปยัง
mmdaplus_flag_setจากนั้นสิ้นสุด transaction และนับจำนวนระเบียนที่มีค่า'MMDA+'
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
BEGIN;
-- Set the flag to MMDA+ where the value is greater than $6 million
UPDATE ffiec_reci set FIELD48 = 'MMDA+' where RCON6810 > 6000000;
-- Set a Savepoint
___ mmdaplus_flag_set;
-- Mistakenly set the flag to MMDA+ where the value is greater than $5 million
UPDATE ffiec_reci set FIELD48 = 'MMDA+' where ___ > 5000000;
-- Rollback to savepoint
___ TO ___;
COMMIT;
-- Select count of records where the flag is MMDA+
SELECT count(FIELD48) from ffiec_reci where FIELD48 = 'MMDA+';