Nie ma nic złego w tym fragmencie kodu, jeśli nie chcesz, aby wyjątek bloku pl/sql był dalej propagowany na przykład. Jeśli zrobisz to celowo, nie jest to zły kod ani błąd. To jest haczyk w całości w pl/sql. A w kodzie mogą znajdować się sytuacje, w których masz zagnieżdżone bloki BEGIN/EXCEPTION/END i jedna może nie chcieć, aby transakcja zawodziła, tylko jeśli określony przekrój kodu nie powiedzie się. Nie możesz podać jej złego kodowania, jeśli robisz to celowo z jakiegokolwiek powodu/wymogu.
BEGIN
--something important here
--something even more important here
BEGIN
--something secondary goes here but not important enough to stop the process or
--log a message about it either
--maybe send an informative email to the support group or
--insert a log message when debugging the process or
--the list could go on and on here
EXCEPTION
--I don't care if this block fails, absorbing all errors regardless of type
WHEN OTHERS THEN NULL;
END;
-- something super important here, must happen
EXCEPTION
WHEN NO_DATA_FOUND THEN
-- do something useful for this exception
WHEN OTHERS THEN
-- do something by default if we don't expect this error
END;
To znaczy, że zła praktyka nie jest tu za pomocą „Kiedy inni Następnie Null”, ale * tylko * go używać, to znaczy whitout łapania jakikolwiek inny wyjątek wcześniej? – romaintaz
Nie, źle go używać. w najgorszym przypadku, twoja, gdy inne klauzule powinny gdzieś zalogować się do wyjątku. ale najprawdopodobniej powinieneś się zalogować i zgłosić wyjątek –
@Matthew: Nie zgadzam się. Istnieje kilka doskonale poprawnych scenariuszy, w których chciałbyś wychwycić wszystkie wyjątki i zignorować je. To, czy je rejestrujesz, czy nie, zależy od Ciebie. Zgadzam się, że 9 razy na dziesięć chciałbyś zrobić jakieś logowanie, ale jeśli robię jakiś kod best-effort w często używanym, niskim poziomie API to prawdopodobnie pominęłbym koszty rejestrowania . – darreljnz