2012-05-05 129 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