एकाधिक exception ब्लॉक
क्योंकि ROLLBACK TO और SAVEPOINT को exception हैंडलर्स वाले functions में उपयोग नहीं किया जा सकता, हम नेस्टेड ब्लॉक्स का उपयोग करके उसी व्यवहार की नकल (emulate) कर सकते हैं. ये नेस्टेड ब्लॉक्स स्टेटमेंट्स को इस क्रम में समूहित और व्यवस्थित करते हैं जिसमें वे एक-दूसरे पर निर्भर होते हैं. यहाँ आप एक exception हैंडलर के साथ रिकॉर्ड्स का एक ब्लॉक insert करेंगे जो SAVEPOINT जैसा व्यवहार करता है, फिर एक रिकॉर्ड को exception हैंडलर के साथ update करेंगे. वह update स्टेटमेंट error देगा, और exception हैंडलर अपने-आप केवल उसी ब्लॉक को रोलबैक कर देगा.
यह अभ्यास पाठ्यक्रम का हिस्सा है
PostgreSQL में Transactions और Error Handling
अभ्यास निर्देश
- पहले ब्लॉक में,
patientsमें ये रिकॉर्ड्स insert करें: (a1c=5.6,glucose=93, औरfasting=TRUE),(6.3, 111, TRUE)(4.7, 65, TRUE)एकEXCEPTIONहैंडलर के साथ जोerrorsमेंmsgके रूप में'failed to insert'insert करता है. - दूसरा नेस्टेड ब्लॉक खोलें और ID 1 वाले patient को update करें ताकि उसके
fastingका मान'true'हो, ऐसे exception handling के साथ जोerrorsटेबल में'Inserted string into boolean.'वालाmsgरिकॉर्ड करे. - दोनों ब्लॉक्स को
ENDकरें.
इंटरैक्टिव व्यावहारिक अभ्यास
इस अभ्यास को इस नमूना कोड को पूरा करके आज़माएँ।
-- Make a DO function
DO $$
-- Open a transaction block
BEGIN
-- Open a nested block
BEGIN
INSERT INTO ___ (___, ___, ___)
VALUES (5.6, 93, TRUE), ___, ___;
-- Catch all exception types
EXCEPTION WHEN others THEN
INSERT INTO ___ (msg) VALUES ('failed to insert');
-- End nested block
END;
-- Begin the second nested block
BEGIN
UPDATE patients SET ___ = '___' WHERE id=1;
-- Catch all exception types
EXCEPTION WHEN others THEN
INSERT INTO errors (msg) VALUES ('Inserted ___ into ___.');
-- End the second nested block
END;
-- END the outer block
END;
$$ language 'plpgsql';
SELECT * FROM errors;