Saltar la navegación

2.5.3.- Manejo de errores (IV).

Oracle también permite que nosotros lancemos nuestros propios mensajes de error a las aplicaciones y asociarlos a un código de error que Oracle reserva, para no interferir con los demás códigos de error. Lo hacemos por medio del procedimiento:

RAISE_APPLICATION_ERROR(error_number, message [, (TRUE|FALSE)]);

Donde error_number es un entero negativo comprendido entre –20000..-20999 y message es una cadena que devolvemos a la aplicación. El tercer parámetro especifica si el error se coloca en la pila de errores (TRUE) o se vacía la pila y se coloca únicamente el nuestro (FALSE). Sólo podemos llamar a este procedimiento desde un subprograma.

No hay excepciones predefinidas asociadas a todos los posibles errores de Oracle, por lo que nosotros podremos asociar excepciones definidas por nosotros a errores Oracle, por medio de la directiva al compilador (o pseudoinstrucción):

PRAGMA_INIT( nombre_excepcion, error_Oracle )

Donde nombre_excepcion es el nombre de una excepción definida anteriormente, y error_Oracle es el número negativo asociado al error.

DECLARE
     no_null EXCEPTION;
     PRAGMA EXCEPTION_INIT(no_null, -1400);
     id familias.identificador%TYPE;
     nombre familias.nombre%TYPE;
BEGIN
     ...
     nombre := NULL;
     ...          
     INSERT INTO familias VALUES (id, nombre, null, null);
EXCEPTION
     WHEN no_null THEN
          ...
END;

Oracle asocia 2 funciones para comprobar la ejecución de cualquier sentencia. SQLCODE nos devuelve el código de error y SQLERRM devuelve el mensaje de error asociado. Si una sentencia es ejecutada correctamente, SQLCODE nos devuelve 0 y en caso contrario devolverá un número negativo asociado al error (excepto NO_DATA_FOUND que tiene asociado el +100).

DECLARE
cod number;
msg varchar2(100);
BEGIN
...
EXCEPTION
WHEN OTHERS THEN
     cod := SQLCODE;
     msg := SUBSTR(SQLERRM, 1, 1000);
     INSERT INTO errores VALUES (cod, msg);
END;


Autoevaluación

Pregunta

De las siguientes afirmaciones marca las que creas que son correctas.

Respuestas

Podemos lanzar nuestros propios mensajes de error a las aplicaciones.

Podemos acceder al código de error generado por la ejecución de una sentencia pero no a su mensaje asociado.

Podemos asociar excepciones definidas por nosotros a códigos de error de Oracle.

Retroalimentación