शुरू करेंमुफ़्त में शुरू करें

एकाधिक 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;
कोड संपादित करें और चलाएँ