В PL/SQL есть специальный механизм для обработки ошибок, который позволяет получить код ошибки для дальнейшей обработки. Код ошибки может быть полезен для определения причины возникновения ошибки и принятия соответствующих мер для ее иборьбы.
В этой статье мы рассмотрим, как получить код ошибки в PL/SQL и приведем примеры его использования. Мы также расскажем о других возможностях обработки ошибок, таких как получение текста ошибки и вывод стека вызовов.
Что такое PL/SQL и как получить код ошибки?
PL/SQL (Procedural Language/Structured Query Language) — это язык программирования, разработанный для работы с базами данных Oracle. Он предоставляет возможность создания процедур, функций, блоков кода и пакетов, которые выполняются внутри базы данных.
PL/SQL предоставляет различные инструменты для обработки ошибок во время выполнения программы. Код ошибки является специальным числовым значением, которое указывает на конкретную ошибку, возникшую в процессе выполнения блока кода. Получить код ошибки можно с помощью встроенной функции SQLCODE.
Получение кода ошибки с помощью SQLCODE
Для получения кода ошибки в PL/SQL можно использовать встроенную функцию SQLCODE. Она возвращает значение типа NUMBER, которое представляет собой код ошибки, если она произошла во время выполнения программы, или 0, если ошибок не было.
Синтаксис использования функции SQLCODE выглядит следующим образом:
DECLARE
-- объявление переменной для хранения кода ошибки
error_code NUMBER;
BEGIN
-- выполнение кода, который может вызвать ошибку
...
-- получение кода ошибки с помощью функции SQLCODE
error_code := SQLCODE;
-- обработка ошибки в соответствии с полученным кодом
...
END;
После выполнения кода, который может вызвать ошибку, значение функции SQLCODE присваивается переменной error_code. Затем можно использовать это значение для анализа и обработки ошибки в соответствии с логикой программы.
Обработка ошибок с помощью WHEN OTHERS
Кроме получения кода ошибки с помощью SQLCODE, PL/SQL также предоставляет возможность использовать конструкцию WHEN OTHERS для обработки всех ошибок, которые могут возникнуть в блоке кода.
Синтаксис использования конструкции WHEN OTHERS выглядит следующим образом:
BEGIN
-- выполнение кода, который может вызвать ошибку
...
-- обработка ошибки
EXCEPTION
WHEN OTHERS THEN
-- обработка ошибки в соответствии с логикой программы
...
END;
Внутри блока кода, который может вызвать ошибку, можно указать несколько блоков EXCEPTION для обработки различных ошибок по их кодам. Однако, если в блоке кода не указано явное исключение для конкретного кода ошибки, то будет выполнена обработка с помощью конструкции WHEN OTHERS.
В обработчике ошибок, указанном в блоке EXCEPTION с конструкцией WHEN OTHERS, можно использовать функцию SQLCODE для получения кода ошибки и дополнительные функции для получения деталей ошибки, такие как SQLERRM, которая возвращает сообщение об ошибке.
Tips for Analyzing PL/SQL Code
Обработка ошибок в PL/SQL
В PL/SQL, обработка ошибок является важным аспектом разработки. Когда в программах возникают ошибки, это может привести к непредсказуемому поведению и нежелательным последствиям. Поэтому важно предусмотреть механизмы для обработки и управления ошибками. В PL/SQL для этого предоставляются различные инструменты и конструкции.
Обработка исключений
Одним из ключевых механизмов обработки ошибок в PL/SQL является использование исключений. Исключения – это специальные объекты, предназначенные для представления ошибок и непредвиденных ситуаций.
В PL/SQL можно использовать стандартные исключения, предоставляемые языком, или определить собственные исключения. Стандартные исключения включают, например, NO_DATA_FOUND (когда не найдены данные) или TOO_MANY_ROWS (когда найдено слишком много строк в результате запроса).
В приложении PL/SQL возникают исключения, когда происходит ошибка выполнения кода. При возникновении исключения выполнение текущего блока кода прерывается, и управление передается в блок обработки исключений (EXCEPTION). В блоке EXCEPTION можно определить, как обрабатывать исключения конкретного типа.
Получение кода ошибки
Один из способов получить код ошибки в PL/SQL – использовать функцию SQLCODE, которая возвращает код последней ошибки. Этот код может быть использован для принятия решений в блоке обработки ошибок. Например, код ошибки может быть использован для определения, какую именно ошибку нужно обрабатывать и какое действие предпринять в зависимости от нее.
Пример использования функции SQLCODE:
DECLARE ex EXCEPTION; PRAGMA EXCEPTION_INIT(ex, -1403); -- Ошибка "No Data Found" BEGIN ... EXCEPTION WHEN ex THEN IF SQLCODE = -1403 THEN -- обработка ошибки "No Data Found" ... ELSE -- другая обработка ошибки ... END IF; END;
В приведенном примере, если происходит ошибка «No Data Found» (код ошибки -1403), то выполняется соответствующая обработка ошибки. Если же возникает другая ошибка, то выполняется другая обработка. Таким образом, функция SQLCODE позволяет выполнить различные действия в зависимости от типа ошибки.
Использование функции SQLCODE
Функция SQLCODE является одной из наиболее полезных и часто используемых функций в PL/SQL. Она позволяет получить код ошибки, который может возникнуть во время выполнения SQL-запроса. Эта функция возвращает целое число, которое может использоваться для определения причины ошибки и принятия соответствующих мер.
Прежде чем обсудить функцию SQLCODE подробнее, необходимо понимать, что коды ошибок в Oracle делятся на два типа: положительные и отрицательные. Положительные значения кода ошибки указывают на успешное выполнение запроса или операции, а отрицательные значения указывают на ошибку или исключительную ситуацию.
Использование функции SQLCODE
Функцию SQLCODE можно использовать для проверки статуса выполнения SQL-запроса и принятия решений на основе этого статуса. Например, вы можете использовать функцию SQLCODE внутри блока EXCEPTION
для определения причины возникшей ошибки и выполнения определенных действий в зависимости от этой причины.
Пример использования функции SQLCODE:
DECLARE
v_emp_id NUMBER := 100;
v_salary NUMBER;
BEGIN
SELECT salary INTO v_salary FROM employees WHERE employee_id = v_emp_id;
DBMS_OUTPUT.PUT_LINE('Salary: ' || v_salary);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No employee found with ID ' || v_emp_id);
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error code: ' || SQLCODE || ', Error message: ' || SQLERRM);
END;
В этом примере мы пытаемся получить значение зарплаты сотрудника по его идентификатору. Если ни одного сотрудника не найдено с указанным идентификатором, будет сгенерировано исключение NO_DATA_FOUND
. Мы используем блок EXCEPTION
для обработки этого исключения и выводим сообщение об ошибке с помощью функции SQLCODE.
Функция SQLCODE является важным инструментом для обработки и управления ошибками в PL/SQL. Она позволяет получить код ошибки, который можно использовать для принятия решений на основе статуса выполнения SQL-запроса. Правильное использование функции SQLCODE позволяет написать более надежный и отказоустойчивый код, который обрабатывает возможные ошибки и исключительные ситуации.
Использование функции SQLERRM
Функция SQLERRM является одной из самых полезных и распространенных функций в PL/SQL. Она позволяет получить описание последней ошибки, произошедшей в блоке кода.
Чтобы использовать функцию SQLERRM, необходимо знать, что она возвращает текстовую строку, содержащую описание ошибки. Например, если произошла ошибка «ORA-00942: таблица или представление не существует», то функция SQLERRM вернет строку «ORA-00942: таблица или представление не существует».
Пример использования функции SQLERRM:
- BEGIN
- — Блок кода
- EXCEPTION
- WHEN OTHERS THEN
- DBMS_OUTPUT.PUT_LINE(‘Ошибка: ‘ || SQLERRM);
- END;
В приведенном примере блок кода может содержать любую операцию, которая может вызвать ошибку. Если ошибка произойдет, программа перейдет в блок EXCEPTION, где будет выполнена команда DBMS_OUTPUT.PUT_LINE с выводом текста ошибки. Функция SQLERRM используется для получения текста ошибки.
Функция SQLERRM может быть полезна во многих случаях. Например, ее можно использовать для логирования ошибок, чтобы можно было отслеживать возникновение ошибок и их описание. Также ее можно использовать для вывода сообщений об ошибках на экран или в файлы протоколов.
Как видно из примера, использование функции SQLERRM очень просто. Однако, при использовании этой функции необходимо помнить, что она возвращает только последнюю ошибку в блоке кода. Поэтому, если в блоке кода произойдет несколько ошибок, функция SQLERRM вернет только информацию о последней ошибке. Если необходимо получить информацию о всех ошибках, можно использовать другую функцию — SQLERRM(i), где i — номер ошибки (от 1 до 1000).
Вывод информации о ошибке в PL/SQL
PL/SQL язык программирования, используемый в СУБД Oracle, предоставляет возможность обработки ошибок при выполнении программного кода. Ошибки могут возникать из-за некорректных данных или других проблем, и важно уметь определить и обработать эти ошибки для более эффективной работы приложений.
Один из способов получить информацию об ошибке в PL/SQL — использовать системные переменные, которые предоставляют информацию о последней возникшей ошибке. Две такие переменные это: SQLCODE
и SQLERRM
.
SQLCODE
SQLCODE
— это переменная, которая содержит числовой код ошибки. Если ошибка возникла, SQLCODE
будет отличен от нуля, в противном случае он будет равен нулю. Код ошибки может быть положительным или отрицательным числом в зависимости от типа ошибки.
Важно отметить, что значение
SQLCODE
будет сброшено при каждом выполнении оператора SQL или PL/SQL блока. Поэтому, если вы хотите сохранить значениеSQLCODE
для последующей обработки ошибки, вам нужно сначала присвоить это значение другой переменной.
SQLERRM
SQLERRM
— это переменная, которая содержит текстовое описание ошибки. Она предоставляет более детальную информацию о возникшей ошибке, которую можно использовать для логирования или отладки. Если ошибка не возникла, значение SQLERRM
будет пустым.
Также, как и SQLCODE
, значение SQLERRM
будет сброшено при каждом выполнении оператора SQL или PL/SQL блока. Поэтому, если вы хотите сохранить значение SQLERRM
для последующей обработки ошибки, вам нужно сначала присвоить это значение другой переменной.
Пример использования SQLCODE
и SQLERRM
Рассмотрим простой пример, который демонстрирует использование SQLCODE
и SQLERRM
для вывода информации об ошибке:
BEGIN
INSERT INTO employees (employee_id, first_name, last_name)
VALUES (100, 'John', NULL);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error code: ' || SQLCODE);
DBMS_OUTPUT.PUT_LINE('Error message: ' || SQLERRM);
END;
В этом примере мы пытаемся вставить запись в таблицу «employees» с недействительными данными (NULL значения для поля «last_name»). Если операция завершится с ошибкой, блок EXCEPTION
будет выполнен, и мы сможем вывести информацию об ошибке с помощью SQLCODE
и SQLERRM
.
Вывод в этом случае будет выглядеть так:
Error code: -1400
Error message: ORA-01400: cannot insert NULL into ("HR"."EMPLOYEES"."LAST_NAME")
С помощью SQLCODE
мы можем узнать, что код ошибки равен -1400, а с помощью SQLERRM
мы можем узнать, что это ошибка ORA-01400, которая связана с невозможностью вставить NULL значение в поле «last_name» таблицы «employees». Эта информация может быть полезна для дальнейшей обработки ошибок или оповещения пользователей о возникшей проблеме.