Explorando el código, creando soluciones, y compartiendo conocimientos en el fascinante mundo del desarrollo de software.

sábado, 5 de octubre de 2024

PL/SQL: Manejo de Excepciones

Aprender PL/SQL: Manejo de Excepciones
Manejo de Excepciones en PL/SQL

¿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_FOUND y ZERO_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 consulta SELECT INTO no devuelve ninguna fila.
  • TOO_MANY_ROWS: Se produce cuando una consulta SELECT INTO devuelve 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.


Lección Siguiente

© 2024 Aprende con PL/SQL

No hay comentarios:

Publicar un comentario

Java Iniciación en Java Hola mundo en Java Sintaxis básica de Java Orientación a objetos en Java Manejo de excepciones en Java Java desde Cero Colecciones en Java Manejo de Archivos en Java Entrada/Salida en Java Hilos y concurrencia en Java Programación Funcional en Java Programación Orientada a Objetos (OOP) en Java Manejo de fechas y tiempos Persistencia de datos en Java Desarrollo Web en Java Manejo de dependencias Gradle Maven JUnit Git Java Desarrollo de servicios web en Java Patrones de Diseño en Java Principios Básicos de Seguridad en Java Principios SOLID en Java Frameworks populares en Java Ciclo de vida de una aplicación Java Desarrollo Ágil Base de Datos en Java Hola mundo en COBOL Estructura básica de COBOL Sintaxis Básica de COBOL Manipulación de archivos en COBOL Búsqueda en Archivos Secuenciales COBOL Ordenación y Combinación de Archivos COBOL Manejo de Errores en COBOL Subprogramas y Modularidad en COBOL Archivos Indexados en COBOL Clasificación y Fusión de Archivos en COBOL Lectura y Escritura de Archivos Secuenciales COBOL IDE Desarrollo de Software Programación Java Plugin Eclipse Desarrollo Integrado Eclipse IDE Java Development Desarrollo de Aplicaciones Programación en Eclipse Desarrollo Ágil Java EE Desarrollo Web Desarrollo Móvil Eclipse Marketplace Eclipse Plugins JavaFX Desarrollo GUI Git Control de Versiones GitHub Git Bash Git Commands Git Workflow Branching Merging Repositorios Commit Git Branch Git Pull Git Push Git Clone Git Merge Conflictos en Git Git Log Git Tag Git Remote Visual Studio Code IDE Desarrollo de Software Extensiones Editor de Código Programación Configuración VSC Snippets Depuración Control de Versiones Integración Git Atajos de Teclado Temas Productividad Extensiones VSC Lenguajes de Programación