sqlplus - 定期将结果写入文件

时间:2012-05-05 09:25:52

标签: sql linux oracle bash sqlplus

我在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

注意:将每个文件分解为只有一个语句不是一个理想的解决方法。

2 个答案:

答案 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