由於要模擬N個會話的每個調用程序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次,每個都將在快速執行程序100倍繼承假設你的數據庫的JOB_QUEUE_PROCESSES
至少是10,這意味着Oracle可以同時在後臺運行10個作業。創建CALL_MYPROC_N_TIMES
過程並非嚴格必要 - 它只是使構建字符串在工作中更容易執行。
另一種方法是提交1000個作業,每個作業只調用MYPROC
一次,並依靠參數JOB_QUEUE_PROCESSES
限制同時運行的作業數量。如果您想要運行更少的同時進行的會話,那麼這將工作,但要更改數據庫參數更加困難 - 在我發佈的代碼中調整L_NUM_SESSIONS
很容易。
您是否想要一個會話在除您自己以外的會話中調用過程1000次?或者你想讓N個會話同時執行1000/N次的程序? –
假設您需要多個會話來異步執行該過程,N個會話每次同時執行過程1000次/ N次。 – kralco626
我想模擬從外部進程快速調用的存儲過程。 – kralco626