Vì bạn muốn mô phỏng N phiên mỗi lần gọi quy trình 1000 / N lần, tôi có thể sẽ làm một cái gì đó như
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;
Ví dụ này sẽ bắt đầu 10 phiên, mỗi phiên sẽ thực thi quy trình 100 lần liên tiếp nhanh chóng giả sử JOB_QUEUE_PROCESSES
trong cơ sở dữ liệu của bạn ít nhất là 10 nghĩa là Oracle được phép có 10 công việc chạy nền đồng thời. Tạo CALL_MYPROC_N_TIMES
thủ tục không hoàn toàn cần thiết-- nó chỉ làm cho việc xây dựng chuỗi để thực thi trong công việc dễ dàng hơn.
Một giải pháp thay thế sẽ là gửi 1000 công việc, mỗi công việc được gọi là MYPROC
một lần và dựa vào JOB_QUEUE_PROCESSES
để giới hạn số lượng công việc sẽ được chạy đồng thời. Điều đó sẽ hiệu quả, chỉ là việc thay đổi các thông số cơ sở dữ liệu sẽ khó hơn nếu bạn muốn chạy nhiều phiên đồng thời hơn - thật dễ dàng để điều chỉnh L_NUM_SESSIONS
trong mã tôi đã đăng.