2017-01-18 4 views
1

Есть один пакет PLSQL «OMX_BEACON_MIG», где я вызоваВызов же процедуру PLSQL более чем один раз в пакете паралельно

PROCEDURE handle_NR_Site(
    i_old_plan_inst_id NUMBER, 
    i_new_plan_inst_id NUMBER, 
    i_old_act_id  NUMBER, 
    i_new_act_id  NUMBER) 

Для обработки Идентификаторы действий, то есть, если у меня есть 4 ID действия пользователя, то я звоню эту процедуру 4 раз с " i_old_plan_inst_id" , "i_new_plan_inst_id","i_old_act_id","i_new_act_id" различны для каждого действия.

Есть ли какое-либо решение, где я могу вызвать эту процедуру только один раз, и все 4 действия обрабатываются один раз?

Или все равно выполнить вызов этой функции параллельно, вместо того чтобы звонить один за другим? Пожалуйста, руководство.

+1

Вы можете создать 4 незапланированные запланированные задания, но если ваш код должен продолжать после того, как 4 завершенные работы, вам нужно написать код мониторинга, который может проверьте, когда выполняются задания, и вам придется обрабатывать случай, когда один или несколько из них терпят неудачу. Кроме того, вы можете посмотреть процедуру handle_nr_site и посмотреть, есть ли способ конвертировать ее для одновременного обработки нескольких действий. – Boneist

ответ

0

У Oracle есть очень хорошая утилита dbms_scheduler для параллельной работы. Вы можете вызвать функцию ниже четыре раза с разными параметрами, чтобы выполнять их параллельно.

dbms_scheduler.create_job(job_name => dbms_scheduler.generate_job_name('MY_JOB_'), 
    job_type => 'PLSQL_BLOCK', 
    job_action => 'begin handle_NR_Site(i_old_plan_inst_id => param1, i_new_plan_inst_id => param2, i_old_act_id => param3, i_new_act_id => param4); end;', 
    comments => 'Thread 1 descriptionn', 
    enabled => true, 
    auto_drop => true); 

Работы будут работать в фоновом режиме. Запросить таблицу DBA_SCHEDULER_JOB_RUN_DETAILS, чтобы получить статус выполнения.

Для более подробного объяснения проверить ссылку: https://oracle-base.com/articles/10g/scheduler-10g