2

私はbashスクリプトで以下を持っています。inputsqls.txtファイルには、実行に数時間かかる10個のSQLステートメントが含まれています。10個のステートメントがすべて実行される前に、結果を定期的にoutput.txtに書き込む方法はありますか?つまり、30分ごとに、実行されたすべてのクエリの結果をファイルに書き込むか、1つのクエリが完了するたびにファイルを更新します。これにより、10個すべてが完了するのを待たずに、クエリ結果の4つを確認できます。

最終的に、output.txtには10個のクエリすべての結果が含まれるはずです。

sqlplus -l <<sqlly > output.txt
    USER/PASSWORD@SID
    @inputsqls.txt
    EXIT
sqlly

注:各ファイルを1つのステートメントのみに分割することは、理想的な回避策ではありません。

4

2 に答える 2

3

inputsqls.txt でSQL*Plus spool コマンドを使用します。

spool output.txt append

これにより、stdout に出力されたものはすべて、出力時に output.txt に追加されます。

開始時に output.txt がまだ存在しない場合は、単に削除しappendます。

spool output.txt
于 2012-05-05T09:34:46.353 に答える
0

SQL ステートメントが終了する前に出力を生成するかどうかによって異なります。それらがすべて長時間実行されてから結果を並べ替える場合、出力はおそらくプロセスの最後にのみ行われます。

output.txtとにかく定期的にフラッシュされ、ファイルが定期的に更新されるため、おそらく最良の方法です。しかし、すべての出力が最後にある場合、これは起こりません。

1 つの可能性は、10 個のクエリを個別に分割することです (並列ではなく順番に実行していると仮定します。これにより、各クエリがより早く終了し、次のような結果が出力される可能性があります。

sqlplus -l <<sqlly > output.txt
    USER/PASSWORD@SID
    @inputsqls_01.txt
    EXIT
sqlly
sqlplus -l <<sqlly >> output.txt
    USER/PASSWORD@SID
    @inputsqls_02.txt
    EXIT
sqlly
:
sqlplus -l <<sqlly >> output.txt
    USER/PASSWORD@SID
    @inputsqls_10.txt
    EXIT
sqlly
于 2012-05-05T09:31:57.653 に答える