PLSQL DBMS_SCHEDULER ждет ответа - PullRequest
0 голосов
/ 24 июня 2019

Я создал DBMS_SCHEDULER для запуска пакетного скрипта из PL / SQL.Сценарий запускается, как и ожидалось, но теперь мне нужно найти способ приостановить мой PL / SQL-код, пока пакетный скрипт не выполнит свою работу.Моя партия делает что-то вроде

  • Чтение csv-файлов размером x
  • Скопируйте csv-значения в существующий Excel-файл
  • Сжатие этих файлов.

После этого мой код PL / SQL должен запуститься снова.Пакетный процесс может занять от нескольких секунд до одного часа, в зависимости от количества значений.Есть ли способ, как я могу приостановить свой сценарий и ждать ответа?

Здесь мой код

BEGIN
   DBMS_SCHEDULER.create_job ('myjob',
                              job_action            => 'C:\WINDOWS\SYSTEM32\CMD.EXE',
                              number_of_arguments   => 3,
                              job_type              => 'executable',
                              enabled               => FALSE);

   DBMS_SCHEDULER.set_job_argument_value ('myjob', 1, '/q');

   DBMS_SCHEDULER.set_job_argument_value ('myjob', 2, '/c');

   DBMS_SCHEDULER.set_job_argument_value ('myjob', 3, 'c:\temp\test.bat');

   DBMS_SCHEDULER.enable ('myjob');
END;

Я использую Oracle 11g.

1 Ответ

1 голос
/ 25 июня 2019

Что вы можете сделать, это создать таблицу с одним столбцом, который будет содержать значение для выполнения планировщика. Поместите весь код PL / SQL в if-else, который проверяет значение в этой таблице. Если значение равно true, то код будет выполняться так, как требуется, если значение равно false, то он просто завершает выполнение, ничего не делая. Поэтому, когда ваш пакетный скрипт начинает обновлять значение в таблице как ложное, поэтому каждый раз, когда запускается планировщик, он видит false и завершает работу, ничего не делая, в конце пакетного сценария обновляет значение до true, чтобы следующий запуск планировщика выполнялся по мере необходимости. .

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...