El manejo de excepciones en PL/SQL es una parte crucial para crear programas robustos y confiables. Las excepciones son eventos que interrumpen el flujo normal de ejecución de un programa. En PL/SQL, puedes manejar estas excepciones para que tu programa pueda recuperarse de errores y continuar ejecutándose.
Conceptos Clave
- Excepciones Predefinidas: PL/SQL proporciona un conjunto de excepciones predefinidas que cubren errores comunes.
 - Excepciones Definidas por el Usuario: Puedes definir tus propias excepciones para manejar situaciones específicas de tu aplicación.
 - Bloque EXCEPTION: Es una sección del bloque PL/SQL donde se manejan las excepciones.
 
Estructura del Bloque EXCEPTION
Un bloque PL/SQL puede tener una sección EXCEPTION opcional que sigue a la sección de ejecución. La estructura general es la siguiente:
DECLARE
   -- Declaración de variables y excepciones
BEGIN
   -- Código ejecutable
EXCEPTION
   -- Manejo de excepciones
   WHEN exception_name1 THEN
      -- Código para manejar exception_name1
   WHEN exception_name2 THEN
      -- Código para manejar exception_name2
   WHEN OTHERS THEN
      -- Código para manejar todas las demás excepciones
END;Ejemplo Práctico
Vamos a ver un ejemplo práctico que ilustra cómo manejar excepciones en PL/SQL.
Ejemplo: División por Cero
DECLARE
   num1 NUMBER := 10;
   num2 NUMBER := 0;
   result NUMBER;
BEGIN
   result := num1 / num2;
   DBMS_OUTPUT.PUT_LINE('El resultado es: ' || result);
EXCEPTION
   WHEN ZERO_DIVIDE THEN
      DBMS_OUTPUT.PUT_LINE('Error: División por cero.');
   WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE('Error desconocido.');
END;Explicación del Código
- Declaración de Variables: Se declaran tres variables 
num1,num2yresult. - Sección BEGIN: Se intenta realizar una división por cero, lo que generará una excepción.
 - Sección EXCEPTION:
WHEN ZERO_DIVIDE THEN: Maneja específicamente la excepción de división por cero.WHEN OTHERS THEN: Maneja cualquier otra excepción que no haya sido capturada por las cláusulas anteriores.
 
Excepciones Predefinidas
PL/SQL tiene varias excepciones predefinidas que puedes usar directamente. Aquí hay una tabla con algunas de las más comunes:
| Excepción | Descripción | 
|---|---|
NO_DATA_FOUND | 
No se encontró ningún dato. | 
TOO_MANY_ROWS | 
La consulta devolvió demasiadas filas. | 
ZERO_DIVIDE | 
Intento de dividir por cero. | 
INVALID_CURSOR | 
Operación no válida en un cursor. | 
Definiendo Excepciones Personalizadas
Puedes definir tus propias excepciones utilizando la palabra clave EXCEPTION en la sección DECLARE.
Ejemplo: Excepción Personalizada
DECLARE
   e_custom EXCEPTION;
   num1 NUMBER := 10;
   num2 NUMBER := 0;
   result NUMBER;
BEGIN
   IF num2 = 0 THEN
      RAISE e_custom;
   ELSE
      result := num1 / num2;
   END IF;
EXCEPTION
   WHEN e_custom THEN
      DBMS_OUTPUT.PUT_LINE('Error: División por cero personalizada.');
   WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE('Error desconocido.');
END;Explicación del Código
- Declaración de Excepción Personalizada: 
e_customse declara como una excepción personalizada. - Condición para Lanzar la Excepción: Se utiliza una condición 
IFpara verificar sinum2es cero y, en ese caso, se lanza la excepción personalizada usandoRAISE. - Manejo de la Excepción Personalizada: En la sección 
EXCEPTION, se manejae_customy se imprime un mensaje específico. 
Ejercicios Prácticos
Ejercicio 1: Manejo de Excepciones Predefinidas
Escribe un bloque PL/SQL que intente convertir una cadena a un número y maneje la excepción VALUE_ERROR si la conversión falla.
DECLARE
   str VARCHAR2(10) := 'abc';
   num NUMBER;
BEGIN
   num := TO_NUMBER(str);
   DBMS_OUTPUT.PUT_LINE('El número es: ' || num);
EXCEPTION
   WHEN VALUE_ERROR THEN
      DBMS_OUTPUT.PUT_LINE('Error: Conversión de valor fallida.');
   WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE('Error desconocido.');
END;Ejercicio 2: Excepciones Personalizadas
Define una excepción personalizada para manejar el caso en que una variable numérica sea negativa. Si la variable es negativa, lanza la excepción y maneja el error imprimiendo un mensaje adecuado.
DECLARE
   e_negative_number EXCEPTION;
   num NUMBER := -5;
BEGIN
   IF num < 0 THEN
      RAISE e_negative_number;
   ELSE
      DBMS_OUTPUT.PUT_LINE('El número es positivo.');
   END IF;
EXCEPTION
   WHEN e_negative_number THEN
      DBMS_OUTPUT.PUT_LINE('Error: El número es negativo.');
   WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE('Error desconocido.');
END;Conclusión
El manejo de excepciones en PL/SQL es esencial para crear aplicaciones robustas y confiables. Al aprender a manejar tanto excepciones predefinidas como personalizadas, puedes asegurarte de que tu código pueda manejar errores de manera efectiva y continuar ejecutándose sin interrupciones. En el próximo módulo, exploraremos cómo trabajar con SQL dentro de PL/SQL, lo que te permitirá integrar consultas SQL directamente en tus bloques PL/SQL.
Curso de PL/SQL
Módulo 1: Introducción a PL/SQL
Módulo 2: Fundamentos de PL/SQL
- Estructura del Bloque PL/SQL
 - Variables y Tipos de Datos
 - Estructuras de Control
 - Cursores
 - Manejo de Excepciones
 
