2012-05-05 55 views
2

我在bash腳本中具有以下內容。 inputsqls.txt文件包含10個需要運行幾個小時的SQL語句。有沒有辦法在所有10條語句運行之前定期將結果寫入output.txt?即每30分鐘將所有執行的查詢結果寫入文件或每次一個查詢完成更新文件時,以便您可以檢查查詢結果的說4,而無需等待全部10完成。sqlplus - 定期將結果寫入文件

最終output.txt應包含所有10個查詢的結果。

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

注:分手每個文件只有一個說法是不是一個理想的解決方法。

回答

0

這取決於SQL語句是否在完成之前生成任何輸出。如果它們都運行很長時間,然後對結果進行排序,那麼輸出可能只會在過程的最後階段。

你擁有它的方式可能是最好的方式,因爲output.txt將被定期刷新,導致定期更新文件。但是如果所有的輸出都結束了,這種情況就不會發生。

一種可能是單獨分手十個查詢(假設你正在運行它們的序列,而不是平行的,這可能允許每個查詢,以儘早完成並輸出其結果,如:

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

使用的SQL * Plus spool command在inputsqls.txt。

spool output.txt append 

這追加無論是打印到stdout到output.txt,因爲它被寫入。

如果output.txt在啓動時不存在,只需刪除append

spool output.txt