Основы языка PL/SQL. Гаршина В.В - 28 стр.

UptoLike

Составители: 

28
operator1;
operator2;
. . .
WHEN OTHERS
THEN
operator1;
operator2;
. . .]
где exception1..N – описываемые исключения, operator1..N – операторы
PL/SQL для обработки соответствующих исключений.
Примеры некоторых предопределенных исключений Oracle:
– NO_DATA_FOUND (ORA-01403). Команда SELECT на выборку
одной строки не вернула данных.
– TOO_MANY_ROWS (ORA-01422). Команда SELECT на выборку
одной строки вернула более одной строки.
– INVALID_CURSOR (ORA-01001). Недопустимая операция с кур-
сором.
– ZERO_DIVIDE (ORA-01476). Попытка деления на ноль.
– DUP_VAL_ON_INDEX (ORA-00001). Попытка вставки дубликата
значения в столбец,
для которого имеется уникальный индекс.
Пример процедуры с блоком обработки предопределенных исключений:
PROCEDURE elim_inventory
(v_product_id IN s_product.id%TYPE) IS
v_id s_product.id%TYPE;
BEGIN
SELECT id
INTO v_id
FROM s_product
WHERE id=v_product_id;
DELETE FROM s_inventory
WHERE product_id=v_product_id;
COMMIT;
EXCEPTION
WHEN NO_DATA_FOUND THEN
                 operator1;
                 operator2;
                 . . .
           WHEN OTHERS
           THEN
                 operator1;
                 operator2;
                 . . .]

где exception1..N – описываемые исключения, operator1..N – операторы
PL/SQL для обработки соответствующих исключений.
     Примеры некоторых предопределенных исключений Oracle:
     – NO_DATA_FOUND (ORA-01403). Команда SELECT на выборку
одной строки не вернула данных.
     – TOO_MANY_ROWS (ORA-01422). Команда SELECT на выборку
одной строки вернула более одной строки.
     – INVALID_CURSOR (ORA-01001). Недопустимая операция с кур-
сором.
     – ZERO_DIVIDE (ORA-01476). Попытка деления на ноль.
     – DUP_VAL_ON_INDEX (ORA-00001). Попытка вставки дубликата
значения в столбец, для которого имеется уникальный индекс.
     Пример процедуры с блоком обработки предопределенных исключений:

     PROCEDURE elim_inventory
        (v_product_id IN s_product.id%TYPE) IS
         v_id s_product.id%TYPE;
     BEGIN
       SELECT id
         INTO v_id
         FROM s_product
         WHERE id=v_product_id;
       DELETE FROM s_inventory
         WHERE product_id=v_product_id;
       COMMIT;
     EXCEPTION
        WHEN NO_DATA_FOUND THEN

                                   28