Muchas veces te habrá pasado que surgen situaciones inesperadas con las que no contabas y a las que tienes que hacer frente. Pues cuando programamos con PL/SQL pasa lo mismo, que a veces tenemos que manejar errores debidos a situaciones diversas. Vamos a ver cómo tratarlos.
Cualquier situación de error es llamada excepción en PL/SQL. Cuando se detecta un error, una excepción es lanzada, es decir, la ejecución normal se para y el control se transfiere a la parte de manejo de excepciones. La parte de manejo de excepciones es la parte etiquetada como EXCEPTION
y constará de sentencias para el manejo de dichas excepciones, llamadas manejadores de excepciones.
Manejadores de excepciones
Sintaxis:
WHEN nombre_excepcion THEN
<sentencias para su manejo>
....
WHEN OTHERS THEN
<sentencias para su manejo>
Ejemplo:
DECLARE
supervisor agentes%ROWTYPE;
BEGIN
SELECT * INTO supervisor FROM agentes
WHERE categoria = 2 AND oficina = 3;
...
EXCEPTION
WHEN NO_DATA_FOUND THEN
--Manejamos el no haber encontrado datos
WHEN OTHERS THEN
--Manejamos cualquier error inesperado
END;
/
La parte OTHERS
captura cualquier excepción no considerada.
Las excepciones pueden estar definidas por el usuario o definidas internamente. Las excepciones predefinidas se lanzarán automáticamente asociadas a un error de Oracle. Las excepciones definidas por el usuario deberán definirse y lanzarse explícitamente.
En PL/SQL nosotros podemos definir nuestras propias excepciones en la parte DECLARE
de cualquier bloque. Estas excepciones podemos lanzarlas explícitamente por medio de la sentencia RAISE nombre_excepción
.
Excepciones definidas por el usuario
Sintaxis:
DECLARE
nombre_excepcion EXCEPTION;
BEGIN
...
RAISE nombre_excepcion;
...
END;
Ejemplo:
DECLARE
categoria_erronea EXCEPTION;
BEGIN
...
IF categoria<0 OR categoria>3 THEN
RAISE categoria_erronea;
END IF;
...
EXCEPTION
WHEN categoria_erronea THEN
--manejamos la categoria errónea
END;