我在bash脚本中有以下内容。 inputsqls.txt文件包含10个SQL语句,需要几个小时才能运行。有没有办法在所有10个语句运行之前定期将结果写入output.txt?即,每30分钟将执行的所有查询的结果写入文件,或者每次一个查询完成更新文件,这样您就可以检查4个查询结果而无需等待所有10个完成。
最终output.txt应该包含所有10个查询的结果。
sqlplus -l <<sqlly > output.txt
USER/PASSWORD@SID
@inputsqls.txt
EXIT
sqlly
注意:将每个文件分解为只有一个语句不是一个理想的解决方法。
答案 0 :(得分:3)
在inputsqls.txt中使用SQL * Plus spool command。
spool output.txt append
这会在写入时将打印到stdout的内容附加到output.txt。
如果在启动时output.txt尚未存在,只需删除append
:
spool output.txt
答案 1 :(得分:0)
这取决于SQL语句在完成之前是否生成任何输出。如果它们都运行了很长时间然后排序结果,那么输出可能只是在过程的最后。
你拥有它的方式可能是最好的方式,因为无论如何都会定期刷新output.txt
,导致定期更新文件。但如果所有输出结束都不会发生这种情况。
一种可能性是单独分解十个查询(假设您按顺序而不是并行运行它们。这可能允许每个查询更快地完成并输出其结果,例如:
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