SQLブロック用にスケジュールされたログファイルと出力cronジョブの印刷 - 日付と時刻を含む(すべてのcronを実行)

SQLブロック用にスケジュールされたログファイルと出力cronジョブの印刷 - 日付と時刻を含む(すべてのcronを実行)

pl / sqlブロックを実行するシェルスクリプトがあり、出力ファイルに出力を印刷しますが、以前の情報を保持せず、スクリプトが実行された日時も表示しません。

私のスクリプトは次のとおりです。

#!/bin/bash

sqlplus -s $DATABASE > output << EOSQL 

SET FEEDBACK ON

declare

veventSource varchar2(20);
verrorcode integer;
verrorMessage varchar2(255);

begin

for rec in (select substr(customer,3) as pid, substr(account_num,1,2) as 
countrycode from account 
where substr(account_num,1,2) = substr(account_num,3,2)
and customernot in (select customer from custsource) )

loop

veventSource := rec.countrycode||'_'||rec.pid;
IPGDDL.LINKTOAC(rec.countrycode,rec.LID,veventSource,
'01-JAN-1971',null,'F',null,null,null,null,null,verrorcode,verrorMessage);
dbms_output.put_line(verrorcode);
dbms_output.put_line(verrorMessage);
commit;

end loop;

end;
/
EXIT

EOSQL

スクリプトの実行後にログファイルがありますPL/SQL Procedure completed successfully

このスクリプトを使用して、cronジョブが実行された日時を含むディレクトリのoutput.txtファイルにSQL出力を印刷し、すべての古いデータをログに保存したいと思います。

この問題を解決するのに役立つ人はいますか?

答え1

sqlplusスクリプトの出力を印刷するには、次のものを使用できます。

set serveroutput on

~からSQL*Plus®ユーザーズ・ガイドおよび参照:

DBMS_OUTPUT.PUT_LINESQL * PlusのストアドプロシージャまたはPL / SQLブロックの出力を表示するかどうかを制御します(例:

出力が必要です。追加リダイレクト演算子を使用output.txtできます。>>

sqlplus -s $DATABASE >>output.txt << EOSQL
...

演算子は>ファイルの右側(存在する場合)をゼロサイズに切り捨てます。
引用:バッシュリファレンスマニュアル(Bashが#!/bin/bashスクリプトベースのshebangであると仮定)。

cronジョブの実行日時を含めるには、次のように追加します。

date >>output.txt

を呼び出す前にスクリプトに追加してくださいsqlplus
利用可能な日付形式オプションについては、システムにインストールされているコマンド(たとえば)のマニュアルを参照してください。dateman date

または、-sオプションを削除することもできますsqlplus。その出力にはタイムスタンプが含まれており、実行日時を記録するために追加のコマンドを使用する必要はありません(ただし、望ましくない複数のメッセージも含まれます)。

関連情報