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