产品设计使用具有相似签名的单独表格来保存不同类型的数据。等待完成几个DBMS_SCHEDULER.CREATE_JOB
因此,您可以在不锁定的情况下单独并行执行每个表上的计算。
我优化了计算代码,使其运行速度提高了7倍,但接下来10%的性能提升,我认为需要x10更多时间进行编码/测试。
必须在所有表上执行计算,以便逻辑上进行并行计算(特别是当服务器有32个内核时)。为了这样的目的,我发现有用DBMS_SCHEDULER包:
declare
job1 clob := dbms_scheduler.generate_job_name('REPAYMENT_');
job2 clob := dbms_scheduler.generate_job_name('REPAYMENT_');
begin
dbms_scheduler.create_job(job_name => job1,
job_type => 'PLSQL_BLOCK',
job_action => 'begin calc_rep(30, DATE ''2012-01-01'', DATE ''2012-12-31''); end;',
enabled => true,
auto_drop => true);
dbms_scheduler.create_job(job_name => job2,
job_type => 'PLSQL_BLOCK',
job_action => 'begin calc_rep(31, DATE ''2012-01-01'', DATE ''2012-12-31''); end;',
enabled => true,
auto_drop => true);
dbms_output.put_line('jobs was finished');
end;
/
但我不知道如何等待作业结束前工作结束消息...
不断轮询scheduler_jobs在环路一个效率低下的解决方案,但它只是一个想到的问题。搜索和官方文档不采取任何相关的解决方案。
创建工作不会启动它。听起来像你想要一个工作链,在那里你可以按特定的顺序(或同时)运行多个步骤(作业)。我忙于atm来给出一堆代码,但请参阅[here](http://www.oracle-base.com/articles/10g/scheduler-enhancements-10gr2.php#job_chains),例如 – tbone
@ tbone感谢兴趣+1 – gavenkoa