在sqlplus中执行时,需要一种方法将PL / SQL程序错误消息重定向到日志文件。
假设PL / SQL程序名为send_2012.sql
,并且它具有以下异常块
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;
要在KornShell(ksh)脚本中运行PL / SQL程序,我有:
sqlplus some_username/'some_password' @some_database \
@/some/directory/send_2012.sql \
$parameter1 $paramenter2
假设执行send_2012.sql
时发生错误,如何将错误消息从var_err重定向到/some/log/directory/log_send_2012.txt
?
非常感谢。
答案 0 :(得分:4)
像这样设置你的脚本:
-- 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
从该目录登录sqlplus并运行:
SQL>@test.sql
您将在日志文件(test.log)中找到例外。
答案 1 :(得分:0)
我解决了日志记录问题,这就是我所做的:
在pl / sql程序中,我将DBMS_PUTLINE("error messages goes here, etc");
插入到程序正文和异常部分。
从Korn shell脚本调用sqlplus时,我使用常规输出重定向来记录pl / sql异常:
sqlplus some_username/'some_password' @some_database \
@/some/directory/send_2012.sql \
$parameter1 $paramenter2 \
> /some/log/directory/send_2012.log
我所做的可能不是最好的解决方案。在pl / sql程序之前和之后换行Spool
可能会为您提供更多格式化选项,但是当系统成功执行程序时,它还可能包含输出结果(例如来自select
语句)。 p>