Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/10/2010, 09:42
Alextroy
 
Fecha de Ingreso: marzo-2005
Mensajes: 189
Antigüedad: 19 años, 9 meses
Puntos: 0
Capturar mens. de error de excepciones no predefinidas

Hola.

Estoy haciendo un procedimiento que guarde en un fichero un registro de las sentencias que se ejecutan en una base de datos.
Ahora estoy en la parte en que intento capturar el mensaje de error en caso de fallo para que quede reflejado en el fichero y me estoy encontrando con el problema de que a no ser que se produzca una excepción predefinida de Oracle, la funcion sqlerrm y sqlcode no me capturan el error. Pongo un ejemplo:

En este caso, si me captura el error. entiendo que el WHEN OTHERS lo interpreta como un WHEN ZERO_DIVIDE y me lo muestra en el OUTPUT.

begin
declare
error1 varchar(199);
error2 varchar(199);
variable NUMBER;
begin
SELECT 1/0 INTO variable FROM DUAL;
exception
when OTHERS then
error1 := sqlerrm;
error2 := to_char(sqlcode);
dbms_output.put_line(error1);
dbms_output.put_line(error2);
end;
end;


Al ejecutarlo me devuelve en el Output:
Error:-1476
ORA-01476: el divisor es igual a cero



Sin embargo, si provoco una excepción no predefinida, como intentar insertar en una tabla que no existe...

begin
declare
error1 varchar(199);
error2 varchar(199);
variable NUMBER;
begin
insert into KKFUTIS values ('kk');
exception
when OTHERS then
error1 := sqlerrm;
error2 := to_char(sqlcode);
dbms_output.put_line(error1);
dbms_output.put_line(error2);
end;
end;


En este caso, el editor me devuelve el error
PL/SQL: ORA-00942: la tabla o vista no existe
pero no consigo capturarlo en una variable para volcarlo al fichero y por lo tanto tampoco me aparece en el OUTPUT.

¿se le ocurre a alguien como podria hacerlo?

Muchas gracias de antemano.

Saludos

Última edición por Alextroy; 14/10/2010 a las 10:06