在Oracle中同时运行相同的过程?

时间:2016-08-22 19:31:52

标签: oracle plsql plsqldeveloper

我目前正在使用:

BEGIN
PACKAGE1.PROCEDURE1('PARAM_1','PARAM_A','PARAM_B');
END;

我需要多次运行相同的过程(Oracle),但这次只更改第一个参数,例如:

PACKAGE1.PROCEDURE1('PARAM_2','PARAM_A','PARAM_B');
PACKAGE1.PROCEDURE1('PARAM_3','PARAM_A','PARAM_B');

我怎样才能做到这一点?提前谢谢。

4 个答案:

答案 0 :(得分:0)

在匿名plsql块中写一个迭代次数的循环取决于你想要调用多少个参数的程序。在循环的顶部放置将设置参数的逻辑,然后用它调用过程。但请记住,在程序运行期间,plsql中没有选项可以从控制台或用户读取数据。 //我认为你可以问一下每次循环传递一个其他变量,我不确定是不是可以在plsql中完成你可以尝试使用

  

execute_immidiate

命令,字符串conncatenate作为参数名称。

答案 1 :(得分:0)

你的程序包程序必须是IN OUT参数,我假设第一个参数是IN,所以主人应该处理为此提供值的事情。

程序正在按预期工作,现在来自外部源或其他传递机制的外部传入流必须采取。

只需将这些程序与此程序包对齐,您可以根据IN的需要多次调用此程序。

答案 2 :(得分:0)

如果要同时运行相同的过程,可以尝试将其作为作业提交。

BEGIN

begin
    dbms_scheduler.create_job 
    (  
      job_name      =>  'One_Time_Job_1',  
      job_type      =>  'PLSQL_BLOCK',  
      job_action    =>  'begin PACKAGE1.PROCEDURE1('PARAM_2','PARAM_A','PARAM_B'); end;',  
      start_date    =>  sysdate,  
      enabled       =>  TRUE,  
      auto_drop     =>  TRUE,  
      comments      =>  'one-time job');
  end;


begin
    dbms_scheduler.create_job 
    (  
      job_name      =>  'One_Time_Job_2',  
      job_type      =>  'PLSQL_BLOCK',  
      job_action    =>  'begin PACKAGE1.PROCEDURE1('PARAM_3','PARAM_A','PARAM_B'); end;',  
      start_date    =>  sysdate,  
      enabled       =>  TRUE,  
      auto_drop     =>  TRUE,  
      comments      =>  'one-time job');
  end;

END;

查看DBMS_SCHEDULER了解更多详情。

答案 3 :(得分:0)

如果这是针对具有固定数量并行程序的持续生产流程,我会考虑使用调度程序链。

这将同时执行所有过程,并为您提供额外的功能,例如:

  1. 在其中一个或所有程序完成后运行其他程序的能力
  2. 控制之后运行的程序,具体取决于程序的成功或失败。