Cuando se produce un error, este genera un excepción (Exception). Por ejemplo, si se realiza una división por cero:
begin ... num := 1; den := 0; valor := num / den; ... exception when ZERO_DIVIDE then -- Instrucciones ... end;
En caso que no pueda manejarse el error, puede pasarse al bloque externo mediante RAISE:
begin ... exception when OTHERS then if sqlcode = -4 then -- Manejar el error ... else raise; -- El error sigue su curso como si nunca hubiera sido detectado por la sección exception end if; end;
Excepciones predefinidas
editarLas excepciones predefinidas más usuales son:
-- Relacionadas con tipos de datos INVALID_NUMBER, VALUE_ERROR, ZERO_DIVIDE -- Relacionadas con operaciones de SQL DUP_VAL_ON_INDEX, NO_DATA_FOUND, TOO_MANY_ROWS -- Relacionadas con Cursores CURSOR_ALREADY_OPEN, INVALID_CURSOR
Excepciones definidas por el Usuario
editarSi se desea generar un error, puede utilizarse RAISE_APPLICATION_ERROR:
... raise_application_error(-20100, 'Mensaje del Error 20100, definido por el usuario'); ...
El rango de errores destinado al usuario va entre -20000 y -20999.
Alternativamente, puede declararse una excepción y generar el error mediante RAISE:
declare mi_error exception; begin ... if hay_error then raise mi_error; end if; ... exception when mi_error then ... end;
Finalmente, puede asignarse nombre de excepción a un error, mediante PRAGMA EXCEPTION_INIT:
declare hay_deadlock EXCEPTION; PRAGMA EXCEPTION_INIT(hay_deadlock, -60); begin ... exception when hay_deadlock then ... end;