【问题标题】:sqlplus - periodically write results to filesqlplus - 定期将结果写入文件
【发布时间】:2012-05-14 16:29:33
【问题描述】:

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

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

【问题讨论】:

    标签: sql linux oracle bash sqlplus


    【解决方案1】:

    这取决于 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
    

    【讨论】:

      【解决方案2】:

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

      spool output.txt append
      

      这会将打印到 stdout 的任何内容附加到 output.txt 写入时。

      如果启动时 output.txt 不存在,只需删除append:

      spool output.txt
      

      【讨论】:

        猜你喜欢
        • 2013-04-05
        • 2018-07-24
        • 1970-01-01
        • 1970-01-01
        • 2011-08-18
        • 2013-09-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多