
- •6. Управляющие структуры и обработка ошибок в pl/sql
- •6.1. Оператор if
- •6.2. Циклы
- •Цикл loop
- •Цикл while
- •Цикл for
- •6.3. Курсоры
- •Объявление курсора и атрибуты курсора
- •Записи pl/sql
- •Использование команд open, fetch и close
- •Курсорный цикл for
- •Предложение where с условием поиска current of
- •6.4. Использование вложенных циклов и курсоров
- •6.5. Обработка ошибок
- •Исключения
- •Системные исключения
- •Исключения, определяемые программистом
Исключения, определяемые программистом
Одной из удобных возможностей PL/SQL является то, что он позволяет программисту определять свои собственные исключения. При активизации и обработке они должны именоваться и объявляться аналогично любым другим элементам PL/SQL.
Ниже приведен полный пример объявления и определения исключения.
set serveroutput 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; /*Актизизация исключения*/
END IF;
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 определена внутри того же блока, в ней можно ссылаться на исключение. Если бы она была определена как хранимая функция, то в ней нельзя было бы использовать имя этого исключения.
Программист может использовать свои собственные исключения для обработки ошибок, которые система не обнаруживает или не считает за ошибки. Например, система не знает, что количество товаров в заказе должно быть целым положительным числом. Однако приложение должно об этом знать, и программист может установить соответствующий контроль, перехватывая значения, не являющиеся положительными целыми числами, в ходе вычислений с количествами товаров.