Освоение обработки исключений PL/SQL: подробное руководство с примерами кода

Обработка исключений — жизненно важный аспект программирования PL/SQL, позволяющий разработчикам корректно обрабатывать ошибки и поддерживать целостность своих приложений. В этой статье блога мы рассмотрим различные методы создания исключений в PL/SQL, приведя попутно примеры кода. К концу вы получите полное представление о методах обработки исключений и будете хорошо подготовлены к обработке ошибок в ваших программах PL/SQL.

  1. Использование предопределенных исключений.
    PL/SQL предоставляет набор предопределенных исключений, которые можно использовать для обработки распространенных ошибок. К этим исключениям относятся NO_DATA_FOUND, Too_MANY_ROWS и другие. Вот пример использования исключения NO_DATA_FOUND:
DECLARE
  emp_name employees.last_name%TYPE;
BEGIN
  SELECT last_name INTO emp_name FROM employees WHERE employee_id = 1000;
  DBMS_OUTPUT.PUT_LINE('Employee Name: ' || emp_name);
EXCEPTION
  WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.PUT_LINE('No employee found with ID 1000.');
END;
  1. Создание пользовательских исключений.
    PL/SQL позволяет вам определять собственные исключения для обработки определенных сценариев в вашем приложении. Пользовательские исключения обеспечивают больший контроль и гибкость. Вот пример создания и использования пользовательского исключения:
DECLARE
  ex_custom EXCEPTION;
  PRAGMA EXCEPTION_INIT(ex_custom, -20001); -- Assigning an error code
BEGIN
  RAISE ex_custom;
EXCEPTION
  WHEN ex_custom THEN
    DBMS_OUTPUT.PUT_LINE('Custom exception raised. Error code: -20001');
END;
  1. Обработка нескольких исключений.
    PL/SQL позволяет обрабатывать несколько исключений с помощью нескольких предложений WHEN. Этот подход полезен, когда вам нужно по-разному обрабатывать разные исключения. Вот пример:
DECLARE
  ex_custom EXCEPTION;
  ex_other EXCEPTION;
  PRAGMA EXCEPTION_INIT(ex_custom, -20001);
  PRAGMA EXCEPTION_INIT(ex_other, -20002);
BEGIN
  RAISE ex_other;
EXCEPTION
  WHEN ex_custom THEN
    DBMS_OUTPUT.PUT_LINE('Custom exception raised. Error code: -20001');
  WHEN ex_other THEN
    DBMS_OUTPUT.PUT_LINE('Other exception raised. Error code: -20002');
END;
  1. Распространение исключений.
    Вы можете распространять исключения в вызывающую программу с помощью оператора RAISE, не обрабатывая их локально. Это позволяет процедурам более высокого уровня обрабатывать исключения. Вот пример:
CREATE OR REPLACE PROCEDURE proc1 AS
  ex_custom EXCEPTION;
  PRAGMA EXCEPTION_INIT(ex_custom, -20001);
BEGIN
  RAISE ex_custom;
END;
CREATE OR REPLACE PROCEDURE proc2 AS
BEGIN
  proc1;
EXCEPTION
  WHEN ex_custom THEN
    DBMS_OUTPUT.PUT_LINE('Exception propagated from proc1');
END;

Обработка исключений — важнейший навык для разработчиков PL/SQL, гарантирующий, что приложения смогут корректно обрабатывать ошибки и поддерживать целостность данных. В этой статье мы рассмотрели различные методы создания исключений в PL/SQL, включая использование предопределенных исключений, создание пользовательских исключений, обработку нескольких исключений и распространение исключений. Вооружившись этими методами и примерами кода, вы теперь хорошо подготовлены к написанию надежных программ PL/SQL, способных эффективно обрабатывать ошибки.