BaşlayınÜcretsiz başlayın

Birden fazla istisna bloğu

ROLLBACK TO ve SAVEPOINT, istisna işleyicileri olan fonksiyonlarda kullanılamadığından, iç içe bloklar kullanarak aynı davranışı taklit edebiliriz. Bu iç içe bloklar, ifadeleri birbirlerine olan bağımlılık sırasına göre gruplamak ve sıralamak için kullanılır. Burada, bir SAVEPOINTi taklit eden bir istisna işleyicisiyle bir kayıt bloğu ekleyecek, ardından bir kaydı istisna işleyicisiyle güncelleyeceksin. Bu güncelleme ifadesi hata verecek ve istisna işleyicisi yalnızca o bloğu otomatik olarak geri alacak.

Bu egzersiz, kursun bir parçasıdır

PostgreSQL'de İşlemler (Transaction) ve Hata Yönetimi

Kursa Göz Atın

Egzersiz talimatları

  • İlk blokta, patients tablosuna şu kayıtları ekle: (a1c=5.6, glucose=93, ve fasting=TRUE), (6.3, 111, TRUE) (4.7, 65, TRUE). Bir EXCEPTION işleyicisi kullanarak hatada errors tablosuna msg alanına 'failed to insert' ekle.
  • İkinci bir iç blok aç ve ID'si 1 olan hastanın fasting değerini 'true' olarak güncelle. Hata durumunda errors tablosuna msg olarak 'Inserted string into boolean.' kaydeden istisna işleme ekle.
  • Her iki bloğu da END ile kapat.

Uygulamalı etkileşimli egzersiz

Bu egzersizi bu örnek kodu tamamlayarak deneyin.

-- 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;
Kodu Düzenle ve Çalıştır