oracledebuggingplsqlconsole-outputunbuffered-output

Oracle PL/SQL - tips for immediate output / console printing


I have a number of pl/sql procedures that can take several minutes to run. While developing them, I've added a few print statements to help debug and also provide some feedback and progress indicators. Initially, I ran these on small test sets and output was almost instantaneous. Now that I'm testing with larger test sets that take several minutes to run, I find that printing to the console is no longer suitable, because nothing gets printed until the procedure ends. I'm used to working in environments that do not buffer their output and print it immediately and adding simple print-statements for simple debugging and diagnostic is common.

Is it possible in pl/sql to print output immediately (not buffered)? If not, what alternatives do people recommend to get a similar result?


Solution

  • You can have a procedure that writes messages to a table using an autonomous transaction something like:

    procedure log (p_message)
    is
        pragma autonomous_transaction;
    begin
        insert into message_log (user, datetime, message)
        values (user, sysdate, p_message);
        commit;
    end;
    

    Then monitor the table from another Oracle session.