运行 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 了解更多详情。
如果这是针对具有固定数量并行过程的持续生产过程,我会考虑使用调度程序链。
这将同时执行所有程序,并为您提供额外的功能,例如:
- 能够 运行 其他过程中的一个或所有完成时的能力
- 控制之后的程序 运行,具体取决于程序的成功或失败。
我目前正在使用:
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 了解更多详情。
如果这是针对具有固定数量并行过程的持续生产过程,我会考虑使用调度程序链。
这将同时执行所有程序,并为您提供额外的功能,例如:
- 能够 运行 其他过程中的一个或所有完成时的能力
- 控制之后的程序 运行,具体取决于程序的成功或失败。