Исключения, определяемые программистом
PL/SQL позволяет программисту определять свои исклю- чения. При возбуждении и обработке они должны имено- ваться и объявляться аналогично другим элементам.
Можно использовать свои исключения для обработки ошибок, которые система не обнаруживает (не считает за ошибки).
Количество товаров в заказе должно быть целым положи- тельным числом. Приложение должно об этом знать. Можно установить контроль, перехватывая значения, не являющиеся положительными целыми.
Пример исключения, определенного программистом (1)
SET SERVER OUTPUT ON ;
DECLARE
quantity1 NUMBER := -2 ; quantity2 NUMBER := 3 ; total NUMBER := 0 ;
quantity_must_positive EXCEPTION;
FUNCTION find_cost (quant NUMBER) RETURN NUMBER IS
BEGIN
IF (quant > 0) THEN RETURN (quant * 20); ELSE RAISE quantity_must_positive;
Пример исключения, определенного программистом (2)
END find_cost; BEGIN
total := find_cost(quantity2);
total := total + find_cost(quantity1); EXCEPTION
WHEN quantity_must_positive THEN
dbms_output.put_line('Total until now: ' || total) ; dbms_output.put_line('Tried to use negative quantity ') ;
END;
/
Исключения, определяемые программистом
Исключение объявляется в секции объявлений аналогично любой другой объявленной там переменной.
Исключение действительно только для данного блока.
Поскольку функция find_cost определена внутри того же блока, в ней можно ссылаться на исключение.
Если бы она была определена, как хранимая функция, в ней нельзя было бы использовать имя этого исключения.