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
DBMS_OUTPUT.PUT_LINE
SQL * PlusのストアドプロシージャまたはPL / SQLブロックの出力を表示するかどうかを制御します(例:
出力が必要です。追加リダイレクト演算子を使用output.txt
できます。>>
sqlplus -s $DATABASE >>output.txt << EOSQL
...
演算子は>
ファイルの右側(存在する場合)をゼロサイズに切り捨てます。
引用:バッシュリファレンスマニュアル(Bashが#!/bin/bash
スクリプトベースのshebangであると仮定)。
cronジョブの実行日時を含めるには、次のように追加します。
date >>output.txt
を呼び出す前にスクリプトに追加してくださいsqlplus
。
利用可能な日付形式オプションについては、システムにインストールされているコマンド(たとえば)のマニュアルを参照してください。date
man date
または、-s
オプションを削除することもできますsqlplus
。その出力にはタイムスタンプが含まれており、実行日時を記録するために追加のコマンドを使用する必要はありません(ただし、望ましくない複数のメッセージも含まれます)。