асинхронные операции в Oracle - PullRequest
2 голосов
/ 09 ноября 2010

В любом случае можно выполнить асинхронные операции в Oracle.

Вот моя ситуация: У меня есть дорогой процесс (скажем, чтобы бежать 30 минут). У меня есть веб-интерфейс, который контролирует время запуска этого процесса. Я ищу запуск прога из внешнего интерфейса и не очень жду, когда процесс завершит выполнение, т.е. элемент управления должен вернуться к веб-приложению со статусом, например, «Выполняется». Я специально искал механизм, позволяющий вернуть управление внешнему интерфейсу, не дожидаясь завершения выполнения процедуры.

Заранее спасибо,

SK

1 Ответ

8 голосов
/ 09 ноября 2010

Я бы запросил у OMG Ponies дополнительную информацию.

В зависимости от того, что вы пытаетесь выполнить, вы можете посмотреть в пакет DBMS_JOBS. Это позволяет вам отправить задание в базу данных, которая работает асинхронно. Если вы хотите, чтобы база данных выполняла что-то вычислительно дорогостоящее в ответ на GUI, например, ваш интерфейс мог бы выполнить что-то вроде

CREATE OR REPLACE PROCEDURE run_asynchronously( p_some_parameter IN PLS_INTEGER, 
                                                p_jobno OUT PLS_INTEGER )
AS
BEGIN
  dbms_job.submit( p_jobno,
                   'BEGIN ' ||
                      ' some_expensive_procedure( ' || 
                              to_char(p_some_parameter) || ' ); ' ||
                   'END;' );
  RETURN p_jobno;
END;

Это передало бы фоновое задание для запуска SOME_EXPENSIVE_PROCEDURE с передачей P_SOME_PARAMETER. Задание не будет запущено до тех пор, пока базовая транзакция не зафиксируется, что отлично, если SOME_EXPENSIVE_PROCEDURE выполняет что-то, что не может быть откатано, например отправка электронной почты или FTP-файл.

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