Книга: Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ
Исключения в действии
Исключения в действии
Внутренне определенные исключения вызываются ядром сервера в ответ на соответствующие ошибки, которые требуют прекращения выполнения. Они охватывают большое количество условий, включая каждый вид нарушения ограничений, арифметические и строковые переполнения, ссылки на отсутствующие объекты, разрушение данных и т.д. Исключения SQLCODE и GDSCODE являются теми же самыми исключениями, что и исключения, используемые при появлении ошибок в процессе выполнения операций динамического SQL. Они описаны в приложении 10.
Пользовательские исключения, доступные только в модулях PSQL, не должны дублировать работу внутренне определенных исключений. Определяйте ваши исключения для использования там, где вы хотите в вашем коде выявлять ошибочные ситуации, которые нарушают ваши бизнес-правила. Три вида исключений изображены на рис. 32.1.
У нас был в главе 30 пример, в котором пользовательское исключение применялось в триггере для прекращения события, продолжение которого нарушило бы бизнес-правило. В этом случае хранимая процедура позаботится о том, чтобы убрать зависимости из организационной структуры при удалении служащего. Это было объявлено следующим образом:
CREATE EXCEPTION REASSIGN_SALES
'Reassign the sales records before deleting this employee.' ^
/* Переназначьте записи продаж перед удалением этого служащего */
COMMIT ^
Рис. 32.1. Стандартная реакция PSQL на исключения
В том месте, где используется это исключение, процедура проверяет, является ли данный служащий участником продаж в каком-либо документе продаж. Если да, то используется пользовательское исключение для завершения процедуры. Конечно, если возникает исключение, то все другие действия, выполненные в процедуре, отменяются.
BEGIN
IE (EXISTS (SELECT PO_NUMBER FROM SALES
WHERE SALES_REP = : emporium) ) THEN
EXCEPTION reassign_sales;
! ! !
ПРИМЕЧАНИЕ. В хранимых процедурах выбора выходные строки, которые уже были получены клиентом в предыдущих циклах FOR SELECT ... DO ... SUSPEND, остаются доступными для клиента. О механизме, работающем в этом случае, см. далее разд. "Оператор WHERE".
. ! .
Существуют случаи, когда возможно использовать пользовательское исключение как способ вмешательства в возникшую проблему и позволить процедуре продолжать выполнение. Вы можете перехватить исключение и написать код для его обработки прямо в этой процедуре. В следующем разделе рассматривается, каким образом эта техника перехвата и исправления может быть использована при исключении REASSIGN_SALES.
- 1.2.7. Исключения
- Стратегия планирования в действии
- Исключения и обработчики исключений
- Рассмотрите возможность исключения необязательной информации перед отправкой данных на устройство
- 10.4. Обработчики сигналов в действии
- Ода ошибкам и исключениям
- Аутентификация при SSH-взаимодействии
- Исключения, возникающие при выполнении операций над числами с плавающей точкой
- Ошибки и исключения
- Исключения, генерируемые приложением
- ГЛАВА 7 Взаимные исключения и условные переменные
- 19.2. Лучшие практические приемы при взаимодействии с разработчиками открытого исходного кода