Oracle/PL/SQL/Excepciones
Apariencia
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
[editar]Las 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
[editar]Si 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;