Язык PL/SQL. Иван Сергеевич Задворьев
Чтение книги онлайн.

Читать онлайн книгу Язык PL/SQL - Иван Сергеевич Задворьев страница 16

СКАЧАТЬ style="font-size:15px;">      команда SELECT INTO возвращает

      более одной строки (ORA-01422)

      VALUE_ERROR

      арифметическая ошибка, ошибка преобразования

      или усечения чисел и строк (ORA-06502)

      INVALID_NUMBER

      ошибка преобразования строки в число (ORA-01722)

      PROGRAM_ERROR

      внутренняя ошибка PL/SQL (ORA-06501)

      ZERO_DIVIDE

      попытка деления на ноль (ORA-01476)

      Схема обработки исключений в Java

      В языке программирования Java при описании работы с исключениями используется бейсбольная терминология. При возникновении исключения бросается (throws) объект-исключение. Этот объект как бейсбольный мяч пролетает через исходный код, появившись сначала в том методе, где произошло исключение. В одном или нескольких местах кода объект-исключение пытаются (try) поймать (catch) и обработать. Причем исключение можно обработать в одном месте кода полностью, а можно обработать исключение частично, выбросить его из обработчика снова, поймать в другом месте и обрабатывать дальше.

      Приведем пример кода на Java с попыткой поймать два исключения – связанные с ошибками арифметических вычислений и нарушением правил работы с массивами (выход индекса массива за границы диапазона):

      try{

      …

      }

      catch(ArithmeticException ae){

      System.out.println("From Arithm.Exc. catch: "+ae);

      }

      catch(ArraylndexOutOfBoundsException arre){

      System.out.println("From Array.Exc.catch: "+arre);

      }

      }

      Схема обработки исключений в PL/SQL

      Работа с исключениями в PL/SQL очень похожа на то, как это делается в Java.

      Для обработки исключений предназначен последний раздел блока PL/SQL – раздел обработки исключений. Этот последний раздел блока после ключевого слова EXCEPTION похож на то, что в Java указывается после ключевого слова catch. Перед обсуждением правил обработки исключений приведем небольшой пример с комментариями в коде.

      DECLARE

      a INTEGER;

      BEGIN

      a := 1;

      a := 2/0; – бросается предопределенное исключение ZERO_DIVIDE

      a := 3; – над этой командой пролетает, команда не выполняется

      a := 4; – над этой командой тоже пролетает, команда не выполняется

      – управление передается в раздел обработки исключений,

      – начинаем «примерку» обработчиков

      EXCEPTION

      – не подходит по имени ловимого исключения к прилетевшему ZERO_DIVIDE

      WHEN PROGRAM_ERROR THEN

      DBMS_OUTPUT.PUT_LINE('Программная ошибка');

      – оба имени ловимых исключений не подходят к прилетевшему ZERO_DIVIDE

      WHEN INVALID_NUMBER OR VALUE_ERROR THEN

      DBMS_OUTPUT.PUT_LINE('Ошибка работы с числами и строками');

      – подходит по имени к ZERO_DIVIDE (поймали), заходим внутрь обработчика

      WHEN ZERO_DIVIDE THEN

      DBMS_OUTPUT.PUT_LINE('Ошибка деления на ноль');

      – OTHERS ловит все, что не поймали другие до него,

      – но сюда в этом случае «примерка» не дошла, раньше поймали

      WHEN OTHERS THEN

      DBMS_OUTPUT.PUT_LINE('При СКАЧАТЬ