Saltar la navegación

2.5.- Manejo de errores (I).

Dibujo de una cara de un chico sorprendido.
ITE (Félix Vallés Calvo) (Uso educativo nc)



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;

Debes conocer

En el siguiente enlace podrás ver las diferentes excepciones predefinidas en Oracle, junto a su código de error asociado (que luego veremos lo que es) y una explicación de cuándo son lanzadas.

Excepciones predefinidas en Oracle.