3

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;

PL / SQLプログラムをKornShell(ksh)スクリプトで実行するには、次のようにします。

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ですか?

とても有難い。

4

2 に答える 2

5

次のようにスクリプトを設定します。

-- 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)にあります。

于 2012-08-22T13:16:05.450 に答える
0

私はロギングの問題を回避しました、これが私がしたことです:

pl / sqlプログラム内でDBMS_PUTLINE("error messages goes here, etc");、プログラム本体と例外セクションの両方に挿入しました。

Kornシェルスクリプトからsqlplusを呼び出すときは、通常の出力リダイレクトを使用してpl/sql例外をログに記録しました。

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

私がしたことは最善の解決策ではないかもしれません。Spoolpl / sqlプログラムの前後にラップすると、フォーマットに関するオプションが増える場合がありますがselect、システムがプログラムを正常に実行したときの出力結果(ステートメントからの出力など)も含まれる場合があります。

于 2012-08-23T14:06:26.953 に答える