Можно ли сохранить сеанс в SQLPlus живым и повторно подключиться к тому же сеансу? BASH связанных

У меня есть цикл в 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 должно также давать результаты всей цепочки.

Пока у меня не было пакетов, выполняющих свою работу за 1 шаг, выполнение этого цикла было просто идеальным. Но TEMPORARY_TABLE исчезает после отключения, и я не могу просто добавить специальный раздел в свой bash-скрипт только для этого пакета, потому что может быть гораздо больше пакетов с разным количеством шагов. Это должно быть сделано автоматически, без особых усилий со стороны пользователей, которые будут использовать этот скрипт.

Так есть ли способ сохранить сеанс в живых? Или есть другой способ сделать это?

1 ответ

Вместо того, чтобы хранить только один вызов процедуры в $string попробуйте записать анонимный блок в переменную и выполнить его. Блок может содержать несколько обращений к процедуре (наряду с другими вещами) и не вернется, пока все они не будут завершены.

Другие вопросы по тегам