在一个包中多次调用同一个 plsql 过程
Posted
技术标签:
【中文标题】在一个包中多次调用同一个 plsql 过程【英文标题】:Calling same plsql Procedure more than once in a package parallely 【发布时间】:2017-01-18 10:24:08 【问题描述】:在调用的地方有一个 plsql 包“OMX_BEACON_MIG”
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 )
要处理操作 ID,即,如果我有 4 个操作 ID,那么我将调用此过程 4 次,因为 " i_old_plan_inst_id" , "i_new_plan_inst_id","i_old_act_id","i_new_act_id"
对于每个操作都是不同的。
有什么解决方案可以让我只调用一次这个过程,所有 4 个动作都处理一次?
或者有没有办法并行调用这个函数而不是一个一个地调用? 请指导。
【问题讨论】:
您可以创建 4 个临时计划作业,但是如果您的代码需要在 4 个作业完成后继续,您需要编写一些监控代码来检查作业何时完成,并且您必须处理其中一个或多个失败的情况。或者,您可以查看 handle_nr_site 过程,看看是否有任何方法可以将其转换为同时处理多个操作。 【参考方案1】: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
【讨论】:
以上是关于在一个包中多次调用同一个 plsql 过程的主要内容,如果未能解决你的问题,请参考以下文章