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

匆匆过客 提交于 2019-12-07 16:48:39

问题


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.


回答1:


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).




回答2:


I worked around the logging issue, here is what I did:

Within the pl/sql program I inserted DBMS_PUTLINE("error messages goes here, etc"); to both the program body and exception sections.

When calling sqlplus from a Korn shell script, I used a regular output redirect to log pl/sql exceptions:

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

What I did may not be the best solution. Wrap Spool before and after your pl/sql program may give you more options on formatting, but it may also include the output result (say from the select statement) when system executes the program successfully.



来源:https://stackoverflow.com/questions/12058020/redirect-plsql-error-message-to-a-log-file-when-executing-it-in-sqlplus

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!