¿Qué son las Excepciones en PL/SQL?
Las excepciones en PL/SQL son situaciones que ocurren durante la ejecución del programa que impiden que continúe de manera normal. El manejo de excepciones permite capturar estos errores y tratarlos de forma controlada, evitando la interrupción abrupta del programa.
Tipos de Excepciones
Existen dos tipos principales de excepciones en PL/SQL:
- Predefinidas: Estas son excepciones comunes que PL/SQL reconoce automáticamente, como
NO_DATA_FOUNDyZERO_DIVIDE. - Definidas por el usuario: Puedes crear tus propias excepciones para manejar situaciones específicas de tu aplicación.
Estructura del Manejo de Excepciones
Para manejar excepciones, utilizamos la sección EXCEPTION dentro de un bloque PL/SQL. Aquí tienes un ejemplo básico:
DECLARE
v_dividendo NUMBER := 10;
v_divisor NUMBER := 0;
v_resultado NUMBER;
BEGIN
v_resultado := v_dividendo / v_divisor; -- Esto causará una excepción
EXCEPTION
WHEN ZERO_DIVIDE THEN
DBMS_OUTPUT.PUT_LINE('Error: División por cero.');
END;
En este ejemplo, se intenta dividir un número por cero, lo que provoca la excepción ZERO_DIVIDE. El bloque EXCEPTION captura este error y muestra un mensaje.
Excepciones Predefinidas Comunes
NO_DATA_FOUND: Ocurre cuando una consultaSELECT INTOno devuelve ninguna fila.TOO_MANY_ROWS: Se produce cuando una consultaSELECT INTOdevuelve más de una fila.ZERO_DIVIDE: Ocurre cuando intentas dividir un número por cero.INVALID_CURSOR: Se lanza cuando se realizan operaciones inválidas en un cursor.
Creando Excepciones Definidas por el Usuario
Puedes definir tus propias excepciones para situaciones específicas. Para ello, debes declarar la excepción, usar RAISE para lanzarla, y capturarla en la sección EXCEPTION:
DECLARE
e_salario_bajo EXCEPTION;
v_salario empleados.salario%TYPE := 2000;
BEGIN
IF v_salario < 3000 THEN
RAISE e_salario_bajo;
END IF;
EXCEPTION
WHEN e_salario_bajo THEN
DBMS_OUTPUT.PUT_LINE('Error: El salario es demasiado bajo.');
END;
En este caso, hemos definido una excepción llamada e_salario_bajo. Si el salario es inferior a 3000, se lanza esta excepción personalizada.
Utilizando RAISE_APPLICATION_ERROR
El procedimiento RAISE_APPLICATION_ERROR te permite lanzar mensajes de error personalizados desde dentro de un bloque PL/SQL. Esto es útil para reportar errores específicos de la lógica de negocio:
BEGIN
IF v_salario < 3000 THEN
RAISE_APPLICATION_ERROR(-20001, 'El salario no puede ser inferior a 3000.');
END IF;
END;
Con RAISE_APPLICATION_ERROR, puedes asignar un código de error personalizado (en este caso, -20001) y un mensaje que describa el problema.
Ejemplo Completo de Manejo de Excepciones
Aquí te mostramos un ejemplo más completo que combina varias excepciones:
DECLARE
v_salario empleados.salario%TYPE;
BEGIN
SELECT salario INTO v_salario
FROM empleados
WHERE empleado_id = 101;
IF v_salario < 3000 THEN
RAISE_APPLICATION_ERROR(-20001, 'Salario demasiado bajo.');
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('Empleado no encontrado.');
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE('Error: Se encontraron múltiples empleados.');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Ocurrió un error inesperado.');
END;
En este ejemplo, gestionamos varias excepciones, desde errores estándar como NO_DATA_FOUND hasta errores personalizados utilizando RAISE_APPLICATION_ERROR.
¡Ahora ya sabes cómo manejar excepciones en PL/SQL! En la próxima lección, exploraremos cómo trabajar con cursores, una técnica para manejar resultados de consultas de manera eficiente.

No hay comentarios:
Publicar un comentario