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
PostgreSQL'de İşlemler (Transaction) ve Hata Yönetimi
kursunun bir parçasıdırEgzersiz talimatları
- İlk blokta,
patientstablosuna şu kayıtları ekle: (a1c=5.6,glucose=93, vefasting=TRUE),(6.3, 111, TRUE)(4.7, 65, TRUE). BirEXCEPTIONişleyicisi kullanarak hatadaerrorstablosunamsgalanına'failed to insert'ekle. - İkinci bir iç blok aç ve ID'si 1 olan hastanın
fastingdeğerini'true'olarak güncelle. Hata durumundaerrorstablosunamsgolarak'Inserted string into boolean.'kaydeden istisna işleme ekle. - Her iki bloğu da
ENDile kapat.
Uygulamalı interaktif egzersiz
Bu örnek kodu tamamlayarak bu egzersizi bitirin.
-- 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;