Como alternativa a escribir en un archivo, la forma de escribir a una mesa? En lugar de llamar DBMS_OUTPUT.PUT_LINE se podría llamar a su propio procedimiento DEBUG.OUTPUT algo como:
procedure output (p_text varchar2) is
pragma autonomous_transaction;
begin
if g_debugging then
insert into debug_messages (username, datetime, text)
values (user, sysdate, p_text);
commit;
end if;
end;
El uso de una transacción autónoma le permite conservar los mensajes de depuración producidos a partir de las transacciones que consiguen deshacen (por ejemplo, después de una excepción es levantado), como sucedería si estuvieras usando un archivo.
La variable booleana g_debugging es una variable de paquete que se puede establecer de forma predeterminada como falsa y establecerse en verdadero cuando se requiere una salida de depuración.
¡Por supuesto, necesita administrar esa tabla para que no crezca para siempre! Una forma sería un trabajo que se ejecuta cada noche/semana y elimina los mensajes de depuración que son "antiguos".
gracias por la rápida respuesta :) voy a tratar de darle una oportunidad (pero sou es realmente difícil hacer que funcione), ¿tiene alguna idea de cómo imprimir DBMS_OUTPUT en un archivo (puede ser más fácil) –