Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

redirect plsql error message to a log file when executing it in sqlplus

Need a way to redirect PL/SQL program error message to a log file when executing it in sqlplus.

Say the PL/SQL program is named send_2012.sql and it has the following exception block

EXCEPTION
        WHEN NO_DATA_FOUND
        THEN
                var_err := 'Data not found. ';
        WHEN OTHERS
        THEN
                var_err := 'Error in '
                        || $$plsql_unit
                        || ' | '
                        || SQLERRM
                        || ' | '
                        || 'Details: '
                        || DBMS_UTILITY.format_error_backtrace;
END;

To run the PL/SQL program in a KornShell (ksh) script, I have:

sqlplus some_username/'some_password' @some_database \
            @/some/directory/send_2012.sql \
            $parameter1 $paramenter2

Suppose error occurs when executing send_2012.sql, how can I redirect the error message from var_err to /some/log/directory/log_send_2012.txt?

Much appreciated.

like image 672
Hank Avatar asked Dec 13 '25 05:12

Hank


1 Answers

Setup your script like this:

-- test.sql script run from sqlplus
set serveroutput on
set echo on
WHENEVER SQLERROR EXIT SQL.SQLCODE
spool on
spool test.log

declare
  l_val date;
begin
  select sysdate into l_val from dual where 1=0;
exception
  when others then raise;
end;
/

spool off

log into sqlplus from that directory and run:

SQL>@test.sql

You'll find the exceptions in the log file (test.log).

like image 165
tbone Avatar answered Dec 16 '25 07:12

tbone