Лично я бы поймал их в процедурах, из которых они выброшены.Это означает, что у вас гораздо больше контроля над тем, как они обрабатываются извне.Например, вы можете выбросить их снова как определенные пользователем исключения, которые вы можете украсить дополнительной информацией о том, что именно пошло не так.
'Failed to find a matching row in table a for value b'
гораздо более информативно вне процедуры, чем
'no data found'
Но это действительно зависит от:
- Требования к сообщениям об ошибках вызывающего приложения
- Реальная функциональность, реализованная в тех случаях, когда вы «делаете вещи» в процедурах
Например, допустим, что вы хотели запустить процедуру 2, даже если выбор в процедуре 1 не нашел строк ..Вам нужно поймать исключение в процедуре 1 и игнорировать его.Если вы этого не сделали, то он будет передан обработчику исключений в процедуре 2.
Или, скажем, вы хотите, чтобы процедура 1 вставляла строку в случае, когда выборка ничего не нашла, вВ этом случае вам нужно перехватить исключение и выполнить вставку в обработчике исключений.
Теперь, прежде чем кто-нибудь прыгнет на меня, я не рекомендую вам использовать обработчики исключений для управления потоком выполнения в вашем коде, эти примеры являются теоретическими, но, надеюсь, вы поняли идею.