Поиск по этому блогу

воскресенье, 13 января 2013 г.

OeBS: пакетная отмена выполнения запросов

Отмена всех одноимённых запросов:

1. Найти program_short_name по ид одного из нужных запросов.

select program_short_name from fnd_conc_req_summary_v where request_id='50654852'

2. Отменить все запросы в очереди по program_short_name

Для запросов ожидающих своей очереди:

update fnd_concurrent_requests set status_code='D', phase_code='C'
where request_id in (select request_id from fnd_conc_req_summary_v
where program_short_name='результат предыдущего запроса' and phase_code='P')
commit;

Для выполняющихся в данный момент запросов:

Внимание! Перед выполнением необходимо убедиться, что для выбранного типа запросов данный способ остановки будет корректным.

update fnd_concurrent_requests set status_code='D', phase_code='C'
where request_id in (select request_id from fnd_conc_req_summary_v
where program_short_name='результат предыдущего запроса' and phase_code='R')
commit;

3 комментария:

  1. Некоторые запросы изменяют данные в бд. Возможно часть запросов, которые вы updatите, данные уже изменили. А после update вам придется сделать commit. Таким образом в бд могут появиться ошибочные данные. Стандартное API в ряде случаев делает rollback перед завершением запроса, а завершение запроса проводит в автономной транзакции, что позволяет этого "эффекта" избежать. Не обманывайтесь простотой :)


    --Завершаете в курсоре, с помощью стандартного API
    v_boolean:=fnd_concurrent.cancel_request(request_id => ,message => )

    взято отсюда
    http://www.sql.ru/forum/449784/oebs-otmena-zaprosov

    ОтветитьУдалить
  2. Справедливо, сделал пометку для скрипта остановки уже запущенных запросов.

    ОтветитьУдалить