7
Czy można utworzyć niestandardowe warunki, gdy zgłaszam wyjątek? Rozważmy następujący przykład:Warunki niestandardowego wyjątku PostgreSQL
BEGIN
y := x/0;
EXCEPTION
WHEN division_by_zero THEN
RAISE NOTICE 'caught division_by_zero';
RETURN x;
END;
Tutaj używam „division_by_zero” warunek złapać wyjątek. Co chciałbym zrobić coś takiego:
BEGIN
[...]
RAISE custom_condition;
EXCEPTION
WHEN custom_condition THEN
[...]
END;
tak, że nie kolidują z ewentualnymi standardowych wyjątków. Mógłbym po prostu zrobić y: = 1/0; i catch division_by_zero, ale nie wygląda to dobrze.
Dzięki! Działa z jedną poprawką - parametr * errcode * powinien składać się z dokładnie pięciu znaków ASCII, w przeciwnym razie spowoduje błąd ("nieprawidłowy kod SQLSTATE"). Oto uwaga z twojego linku: 'Uwaga: Podczas określania kodu błędu przez kod SQLSTATE, nie jesteś ograniczony do predefiniowanych kodów błędów, ale możesz wybrać dowolny kod błędu składający się z pięciu cyfr i/lub wielkich liter ASCII, innych niż 00000. Zaleca się unikanie rzucania kodów błędów, które kończą się trzema zerami, ponieważ są to kody kategorii i mogą zostać uwięzione jedynie poprzez zalewkowanie całej kategorii. " – Snifff
@Sniff: Dzięki - poprawiłem przypadek znaków errcode – Tometzky
@Tometzky: Która właściwość pod kontrolą wyjątku.diagnostic wyświetla komunikat "Pasek zabroniony"? Czy to MESSAGE_TEXT czy PG_EXCEPTION_DETAIL lub PG_EXCEPTION_HINT? (docs: http://goo.gl/F5w1y) – obimod