我可以将SQLPlus中的会话保持活动状态,并重新连接到同一会话吗? BASH相关

时间:2014-12-11 10:38:13

标签: oracle bash session plsql sqlplus

我在Bash中有一个循环,直到今天它才像魅力一样。循环看起来像:

while read line1 ; do
    while read line2 ; do
      stringArray=($line2)
      string=$line1.${stringArray[1]}

        sqlplus /nolog <<EOF
        connect sysuser/syspassword@db_instance
        alter system flush shared_pool;
        quit
        EOF

        sqlplus -s /nolog > /dev/null 2>&1  <<EOF
        connect user/password@db_instance
        variable rc refcursor;
        SPOOL ${line1}_${stringArray[0]}.DATA
        exec :rc := $string;
        print rc;
        spool off
        exit
        EOF

    done < file2.txt
done < file1.txt

为了澄清一件事,变量$string的内容是带有函数和参数的Oracle包:

SOMEPACKAGE.SOMEFUNCTION(some,'parameters',here,'sometimes',NULL,'or',numbers)

现在 - 直到软件包在一个参数化运行中做它应该做的事情 - 一切都很好。但是现在我遇到了一个包,它以5个步骤完成它的工作,步骤由最后一个参数决定。它看起来像这样:

SOMEPACKAGE.SOMEFUNCTION(some,'parameters',here,'sometimes',NULL,'or',1)
SOMEPACKAGE.SOMEFUNCTION(some,'parameters',here,'sometimes',NULL,'or',2)
SOMEPACKAGE.SOMEFUNCTION(some,'parameters',here,'sometimes',NULL,'or',3)
SOMEPACKAGE.SOMEFUNCTION(some,'parameters',here,'sometimes',NULL,'or',4)
SOMEPACKAGE.SOMEFUNCTION(some,'parameters',here,'sometimes',NULL,'or',5)

第一个,结尾为1,正在产生TEMPORARY_TABLE,其他工作(2到5)正在工作。作业号5也应该给出整个链的结果。

直到我让包在一步完成他们的工作,运行这个循环是完美的。但是TEMPORARY_TABLE在断开连接之后就消失了,我不能只在这个包中为我的bash脚本添加一个特殊的部分,因为可能有更多的包,步数不同。这必须自动完成,而不需要使用此脚本的用户付出太多努力。

那么有没有办法保持会话活着?或者还有其他方法吗?

1 个答案:

答案 0 :(得分:0)

不要在$string中只存储一个过程调用,而是尝试将匿名块写入变量并执行该变量。该块可以包含对程序的多次调用(以及其他内容),并且在完成所有操作之前不会返回。