Saltar la navegación

2.5.2.- Manejo de errores (III).

Escultura en la que se ve un ojo pinchado en un tenedor.
ITE (Elena Hervás) (Uso educativo nc)



Continuemos viendo algunos detalles a tener en cuenta, relativos al uso de las excepciones.

  • Cuando ejecutamos varias sentencias seguidas del mismo tipo y queremos capturar alguna posible excepción debida al tipo de sentencia, podemos encapsular cada sentencia en un bloque y manejar en cada bloque la excepción, o podemos utilizar una variable localizadora para saber qué sentencia ha sido la que ha lanzado la excepción (aunque de esta manera no podremos continuar por la siguiente sentencia).
    DECLARE
         sentencia NUMBER := 0;
    BEGIN
         ...
         SELECT * FROM agentes ...
         sentencia := 1;
         SELECT * FROM familias ...
         sentencia := 2;
         SELECT * FROM oficinas ...
         ...
    EXCEPTION
         WHEN NO_DATA_FOUND THEN
              IF sentencia = 0 THEN
                   RAISE agente_no_encontrado;
              ELSIF sentencia = 1 THEN
                   RAISE familia_no_encontrada;
              ELSIF sentencia = 2 THEN
                   RAISE oficina_no_encontrada;
              END IF;
    END;
    /
    
    
  • Si la excepción es capturada por un manejador de excepción apropiado, ésta es tratada y posteriormente el control es devuelto al bloque superior. Si la excepción no es capturada y no existe bloque superior, el control se devolverá al entorno. También puede darse que la excepción sea manejada en un bloque superior a falta de manejadores para ella en los bloques internos, la excepción se propaga de un bloque al superior y así hasta que sea manejada o no queden bloques superiores con lo que el control se devuelve al entorno. Una excepción también puede ser relanzada en un manejador. En la siguiente presentación puedes ver cómo se propagan diferentes excepciones entre diferentes bloques.

Autoevaluación

Pregunta

Todas las excepciones están predefinidas y nosotros no podemos definir nuevas excepciones.

Respuestas

Verdadero.

Falso.

Retroalimentación


Pregunta

Las excepciones definidas por el usuario deben ser lanzadas explícitamente.

Respuestas

Verdadero.

Falso.

Retroalimentación


Pregunta

Es obligatorio declarar todas las excepciones predefinidas que vamos a usar en nuestros bloques.

Respuestas

Verdadero.

Falso.

Retroalimentación