运行 oracle中同时有相同的Procedure?

Run the same Procedure at the same time in Oracle?

我目前正在使用:

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');

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

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

execute_immidiate

以字符串连接作为参数名称的命令。

你的包过程必须带有 IN OUT 参数,我假设第一个参数是 IN 所以主人应该负责为它提供值的事情。

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

只需将它们与此程序包程序对齐,您就可以根据所需的 IN 多次调用此程序。

如果您想同时运行同样的程序,您可以尝试将其作为作业提交。

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 了解更多详情。

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

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

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