【问题标题】:redirect plsql error message to a log file when executing it in sqlplus在 sqlplus 中执行时将 plsql 错误消息重定向到日志文件
【发布时间】:2012-08-16 23:38:30
【问题描述】:

在 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

非常感谢。

【问题讨论】:

    标签: oracle logging plsql sqlplus ksh


    【解决方案1】:

    像这样设置你的脚本:

    -- 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) 中找到异常。

    【讨论】:

      【解决方案2】:

      我解决了日志记录问题,这就是我所做的:

      在 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 语句)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-31
        • 1970-01-01
        • 1970-01-01
        • 2022-07-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多