Karena Anda ingin mensimulasikan N sesi setiap memanggil prosedur 1000/N kali, saya mungkin akan melakukan sesuatu seperti
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;
Contoh ini akan memulai 10 sesi yang masing-masing akan menjalankan prosedur 100 kali secara berurutan dengan asumsi JOB_QUEUE_PROCESSES
database Anda minimal 10 artinya Oracle diizinkan menjalankan 10 pekerjaan di latar belakang secara bersamaan. Membuat CALL_MYPROC_N_TIMES
prosedur tidak sepenuhnya diperlukan-- itu hanya membuat pembuatan string untuk dieksekusi dalam pekerjaan lebih mudah.
Alternatifnya adalah mengirimkan 1000 pekerjaan yang masing-masing disebut MYPROC
sekali dan mengandalkan JOB_QUEUE_PROCESSES
parameter untuk membatasi jumlah pekerjaan yang akan dijalankan secara bersamaan. Itu akan berhasil, hanya saja lebih sulit untuk mengubah parameter basis data jika Anda ingin menjalankan lebih banyak sesi simultan yang lebih sedikit-- mudah untuk menyesuaikan L_NUM_SESSIONS
dalam kode yang saya posting.