我想执行一个对一组给定表执行更新的过程。在这种情况下,有 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),直到所有表都已处理完毕。
这种排队怎么可能实现?