Zacznij terazZacznij za darmo

Wiele bloków obsługi wyjątków

Ponieważ ROLLBACK TO i SAVEPOINT nie mogą być używane w funkcjach z obsługą wyjątków, istnieje sposób na emulowanie tego samego zachowania za pomocą zagnieżdżonych bloków. Bloki te służą do grupowania i porządkowania instrukcji zgodnie z kolejnością ich wzajemnych zależności. W tym ćwiczeniu wstawisz blok rekordów z obsługą wyjątków emulującą działanie SAVEPOINT, a następnie zaktualizujesz rekord z obsługą wyjątków. Instrukcja aktualizacji spowoduje błąd, a obsługa wyjątków automatycznie wycofa tylko ten blok.

To ćwiczenie jest częścią kursu

Transakcje i obsługa błędów w PostgreSQL

Zobacz kurs

Instrukcje do ćwiczenia

  • W pierwszym bloku wstaw do tabeli patients następujące rekordy (a1c=5.6, glucose=93, fasting=TRUE), (6.3, 111, TRUE), (4.7, 65, TRUE) z obsługą EXCEPTION, która wstawia 'failed to insert' jako msg do tabeli errors.
  • Otwórz drugi zagnieżdżony blok i zaktualizuj pacjenta o ID równym 1, ustawiając wartość fasting na 'true', z obsługą wyjątków zapisującą wpis do tabeli errors z komunikatem msg równym 'Inserted string into boolean.'.
  • Zamknij oba bloki instrukcją END.

Interaktywne ćwiczenie praktyczne

Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.

-- 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;
Edytuj i uruchom kod