Rejestrowanie komunikatów dla konkretnych wyjątków
Jednym z najlepszych zastosowań przechwytywania wielu konkretnych wyjątków jest odrębna obsługa i rejestrowanie unikalnych komunikatów o błędach, które dokładnie wyjaśniają, dlaczego dany wyjątek wystąpił. Zastosujmy to w scenariuszu, w którym możliwe są oba warunki błędu. Po ćwiczeniu omówimy, dlaczego przechwycony został właśnie taki komunikat.
To ćwiczenie jest częścią kursu
Transakcje i obsługa błędów w PostgreSQL
Instrukcje do ćwiczenia
- Zbuduj procedurę obsługi wyjątku dla
not_null_violation. - Jeśli wystąpi
not_null_violation, wstaw"failed to insert"jakomsgorazGlucose can not be null.jakodetaildo tabelierrors.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
-- Make a DO function
DO $$
-- Open a transaction block
___
INSERT INTO patients (a1c, glucose, fasting) values (20, null, TRUE);
-- Catch an Exception
EXCEPTION
-- Make it catch check_violation exception types
WHEN check_violation THEN
-- Insert the proper msg and detail
INSERT INTO errors (msg, detail)
VALUES ('failed to insert', 'A1C is higher than clinically accepted norms.');
-- Make it catch not_null_violation exception types
___ ___ ___
-- Insert the proper msg and detail
INSERT INTO errors (msg, detail)
___ (___, ___);
END$$;
-- Select all the errors recorded
SELECT * FROM errors;