0

我想执行一个对一组给定表执行更新的过程。在这种情况下,有 11 个表。此处使用关联数组只是因为用于与位于过程中的表连接的列的名称在相关表中不同:

Declare
  TYPE associative_array IS TABLE OF VARCHAR(100) INDEX BY VARCHAR2(100);
   table_array associative_array;
   l_key VARCHAR2(100);
Begin
  table_array('TABLE1'):='MY_ID1';  --  1
  table_array('TABLE2'):='MY_ID2';  --  2
  table_array('TABLE3'):='MY_ID1';  --  3
  table_array('TABLE4'):='MY_ID1';  --  4
  table_array('TABLE5'):='MY_ID1';  --  5
  table_array('TABLE6'):='MY_ID1';  --  6
  table_array('TABLE7'):='MY_ID2';  --  7
  table_array('TABLE8'):='MY_ID2';  --  8
  table_array('TABLE9'):='MY_ID2';  --  9
  table_array('TABLE10'):='MY_ID1'; -- 10 
  table_array('TABLE11'):='MY_ID1'; -- 11 

   l_key := table_array.first;
   while (l_key is not null) loop
      execute immediate 'MY_UPDATE_PROCEDURE(''' || l_key || ',' || table_array(l_key)||''')'; -- calling a procedure which performes updates on tables
      l_key := table_array.next(l_key);
   end loop;
end;

现在,出于性能原因,我想并行执行 4 个过程,所以 DBMS_SCHEDULER 可能是要走的路。棘手的事情是:假设有 4 个程序正在运行。当在某个点 1 或多个实例完成时,我立即希望执行另一个实例,以便始终运行最大数量的实例(例如,由于自己的定义为 4),直到所有表都已处理完毕。

这种排队怎么可能实现?

4

1 回答 1

1

这可能是一种方法:监视作业状态 看起来您应该能够设置一个程序来安排作业,监视它们,并使用作业状态事件来跟踪有多少正在运行并在旧作业完成时安排新作业

于 2017-11-11T10:34:53.360 回答