Gestión de errores en PL/SQL: generación de excepciones desde el código
Lo que muchos programadores desconocen es que PLSQL permite generar excepciones desde el propio código. ¿Por qué el código PL/SQL permite esto? Porque no todos los errores en una aplicación son debidos a fallos de procesamiento internos de la base de datos Oracle. También es posible que determinadas condiciones en los datos constituyan un error para nuestra aplicación, en cuyo caso necesitaremos parar nuestro programa y, con mucha probabilidad, notificar al usuario de que algo va mal.
Seguir leyendo...
PLSQL ofrece dos mecanismos para generar excepciones:
El comando SQL RAISE
Con el comando SQL RAISE es posible generar una excepción definida por nosotros mismos o también una excepción ya predefinida por la base de datos Oracle.
En el siguiente ejemplo podemos ver como cuando un usuario decide asignar un valor de NULL al parámetro num_empleado, el procedimiento PL/SQL genera la excepción estándar INVALID_NUMBER:
CREATE OR REPLACE PROCEDURE nombre_empleado (num_empleado in IN INTEGER) IS BEGIN IF num_empleado IS NULL THEN RAISE INVALID_NUMBER; END IF; END;
Por otro lado, conviene mencionar que el commando RAISE resulta especialmente útil para volver a genera una excepción dentro de una sección de manejo de excepciones.
El procedimiento estándar RAISE_APPLICATION_ERROR
El comando RAISE detiene la ejección del programa PL/SQL que lo genera y, a la vez, inicializa una serie de variables internas que permiten identificar el código de error correspondiente y el propio mensaje de error. Por ejemplo, el mensaje de error “ORA-01403 no data found” se trata de un error genérico que suministra la propia base da datos Oracle. Este error y otros errores son suficientes para que la base de datos Oracle pueda gestionarlos de forma adecuada. Pero que ocurre si nuestra aplicación genera errores del tipo “Número de empleado inválido” o “La dirección del empleado contiene errores”. En estos casos un error del tipo “ORA-01403 no data found” no va a ser de gran ayuda para que el usuario identifique que es lo que ha hecho mal y como puede arreglar el problema.
Para pasar desde una aplicación PLSQL un mensaje específico a los usuarios cuando ocurre algún error, lo que se hace es utilizar el procedimiento estándar PL/SQL RAISE_APPLICATION_ERROR. Este procedimiento acepta como parámetros un número entero (nuestro código de error), cuyo valor debe estar entre los valores -20.999 y -20.000, y una cadena de caracteres (nuestro mensaje de error).
Cuando se ejecuta este procedimiento desde un bloque de código PL/SQL, la ejecución del mismo se detiene inmediatamente generándose inmediatamente una excepción, cuyo código de error y mensaje son los pasados al procedimiento RAISE_APPLICATION_ERROR, de manera que si posteriormente llamamos a las funciones estándar SQLCODE y SQLERRM, éstas devolverán dichos valores.
A continuación os dejo un ejemplo de código PLSQL que utiliza dicho procedimiento:
CREATE OR REPLACE PROCEDURE chequear_cod_postal (cod_postal IN VARCHAR2) IS BEGIN IF (cod_postal < '01001' AND cod_postal > '52999') OR LENGTH(cod_postal) != 5 THEN RAISE_APPLICATION_ERROR (-20100, 'El CP debe estar entre lo valores 01001 y 52999'); END IF; END;
En el presente ejemplo se chequea que el código postal se encuentre entre los valores 01001 (Álava) y 52999 (Melilla) y que la longitud del mismo sea de cinco caracteres, mostrando al usuario el error “El CP debe estar entre lo valores 01001 y 52999” en caso de que no se cumpla alguna de estas dos condiciones.
0 comentarios:
Publicar un comentario