Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Excepc I Ones
Excepc I Ones
En este artculo del Manual de PL/SQL de Oracle vamos a ver lo que son las excepciones, para qu sirven y cmo utilizarlas. Daremos un repaso tambin a los tipos de excepciones, las excepciones definidas por el usuario y la sintaxis con la que tenemos que especificarlas. Por ltimo, de paso que vemos cosas acerca del tratamiento de errores en PL/SQL, explicaremos el RAISE_APPLICATION_ERROR, un componente del sistema gestor de base de datos Oracle que ayuda a gestionar errores y sus mensajes de error.
BEGIN ......... ...... ...... EXCEPTION WHEN <nombre_excepcin> THEN <instrucciones>; ...... [WHEN OTHERS THEN <instrucciones>;] END;
Excepciones predefinidas
Son aquellas que se disparan automticamente al producirse determinados errores. Estas son las ms comunes:
too_many_rows: Se produce cuando select into devuelve ms de una fila. no_data_found: se produce cuando un select . into no devuelve ninguna fila. login_denied: error cuando intentamos conectarnos a Oracle con un login y clave no validos. not_logged_on: se produce cuando intentamos acceder a la base de datos sin estar conectados. program_error: se produce cuando hay un problema interno en la ejecucin del programa. value_error: se produce cuando hay un error aritmtico o de conversin. zero_divide: se puede cuando hay una divisin entre 0. dupval_on_index: se crea cuando se intenta almacenar un valor que creara duplicados en la clave primaria o en una columna con restriccin UNIQUE. invalid_number: se produce cuando se intenta convertir una cadena a un valor numrico. Hay alguna ms pero estas son las ms utilizadas y tenemos que tener en cuenta que no es necesario declararlas en la seccin DECLARE.
DECLARE ... Importe_mal EXCEPTION; ... BEGIN ... IF precio NOT BETWEEN mnimo and mximo THEN RAISE importe_mal; END IF; ...
Otras excepciones
Existen otros errores internos de Oracle que no tienen asignada una excepcin, sino un cdigo de error y un mensaje, a los que se accede mediante funciones SQLCODE y SQLERRM. Cuando se produce un error de estos se trasfiere directamente el control a la seccin EXCEPTION donde se tratara el error en la clausula WHEN OTHERS de la siguiente forma:
Utilizacin de RAISE_APPLICATION_ERROR
En el paquete DBMS_STANDARD se incluye un procedimiento llamado RAISE_APPLICATION_ERROR que nos sirve para levantar errores y definir mensajes de error. Su formato es el siguiente:
RAISE_APPLICATION_ERROR(numero_error,mensaje_error);
Es importante saber que el numero de error esta comprendido entre -20000 y -20999 y el mensaje es una cadena de caracteres de hasta 512 bytes. Este procedimiento crea una excepcin que solo puede ser tratada en WHEN OTHERS. Ponemos un ejemplo para que nos quede ms claro.
CREATE or REPLACE PROCEDURE subir_horas (emple NUMBER, horas_subir NUMBER) IS horas_actuales NUMBER; BEGIN Select horas into horas_actuales from empleados where id_empleado=emple; if horas_actuales is NULL then RAISE_APPLICATION_ERROR(-20010,'No tiene horas'); else update empleados set horas=horas_actuales + horas_subir where id_empleado=emple;