Saltar la navegación

4.14. Excepciones

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. Ejemplo.
WHEN nombre_excepcion THEN
     <sentencias para su manejo>
     ....
WHEN OTHERS THEN
     <sentencias para su manejo>
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 capturada.

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. Ejemplo.
DECLARE
     nombre_excepcion EXCEPTION;
BEGIN
     ...
     RAISE nombre_excepcion;
     ...
END;
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;