gpt4 book ai didi

sql - 在sql developer中执行异步存储过程

转载 作者:行者123 更新时间:2023-12-04 23:45:49 24 4
gpt4 key购买 nike

我想使用 Oracle SQL Developer 多次异步执行存储过程。

伪代码

var pStatus number
var pOraErrCd varchar2
var pOraErrMsg varchar2
for i 1 .. 1000 -- do async
loop
exec myproc('test',:pStatus ,:pOraErrCd ,:pOraErrMsg);
end loop;

存储过程的目的是进行一些插入。为了测试我只想异步执行存储过程很多次。我不关心任何返回值。

“简单”的方法吗?

最佳答案

因为你想模拟 N 个 session ,每个 session 调用过程 1000/N 次,我可能会做类似的事情

CREATE OR REPLACE PROCEDURE call_myproc_n_times( p_n IN NUMBER )
AS
p_status NUMBER;
p_ora_error_code VARCHAR2(1000);
p_ora_error_msg VARCHAR2(1000);
BEGIN
FOR i IN 1 .. p_n
LOOP
myproc( 'test',
p_status,
p_ora_error_code,
p_ora_error_msg );
END LOOP;
END;

DECLARE
l_num_sessions number := 10;
l_exec_per_session number := 100;
l_jobno pls_integer;
BEGIN
FOR i IN 1 .. l_num_sessions
LOOP
dbms_job.submit(
l_jobno,
'BEGIN ' ||
' call_myproc_n_times( ' || l_exec_per_session || ' ); ' ||
'END;',
sysdate + interval '1' minute );
END LOOP;
commit;
END;

此示例将启动 10 个 session ,每个 session 将快速连续执行该过程 100 次,假设您的数据库的 JOB_QUEUE_PROCESSES 至少为 10,这意味着 Oracle 允许同时在后台运行 10 个作业.创建 CALL_MYPROC_N_TIMES 过程并不是绝对必要的——它只是使构建要在作业中执行的字符串更容易。

另一种方法是提交 1000 个作业,每个作业只调用一次 MYPROC 并依赖于 JOB_QUEUE_PROCESSES 参数来限制同时运行的作业数。那行得通,如果您想同时运行更多或更少的 session ,则更改数据库参数会更加困难——在我发布的代码中调整 L_NUM_SESSIONS 很容易。

关于sql - 在sql developer中执行异步存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7324995/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com