2012-05-05 10 views
2

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

最終的にoutput.txtには、10個すべてのクエリの結果が含まれている必要があります。

sqlplus -l <<sqlly > output.txt 
    USER/[email protected] 
    @inputsqls.txt 
    EXIT 
sqlly 

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

答えて

0

SQLステートメントが完了する前に出力を生成するかどうかによって異なります。それらがすべて長時間実行されている場合は、結果を順序付けすると、おそらく出力は処理の最後にのみ存在します。

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

一つの可能​​性は、あなたが順序ではなく、それらを並行して実行していると仮定すると(個別に10個のクエリを分割することです。これは、各クエリが早く、出力のようなその結果、終了することを可能にする:。

sqlplus -l <<sqlly > output.txt 
    USER/[email protected] 
    @inputsqls_01.txt 
    EXIT 
sqlly 
sqlplus -l <<sqlly >> output.txt 
    USER/[email protected] 
    @inputsqls_02.txt 
    EXIT 
sqlly 
: 
sqlplus -l <<sqlly >> output.txt 
    USER/[email protected] 
    @inputsqls_10.txt 
    EXIT 
sqlly 
3

がinputsqls.txtでSQL * Plusのspool commandを使用してください。

spool output.txt append 

これは、それが書き込まれますようOUTPUT.TXTするstdoutに印刷されているものが追加されます。

起動時にoutput.txtが存在しない場合は、appendを削除してください:

spool output.txt 
関連する問題