171 lines
5.7 KiB
SQL
171 lines
5.7 KiB
SQL
-- Scheduler helpers for running SIMULATE_COMMERCE_ACTIVITY asynchronously.
|
|
-- Run as the schema owner after oracle_ecommerce_activity.sql.
|
|
-- The schema owner needs the CREATE JOB system privilege.
|
|
|
|
WHENEVER SQLERROR EXIT SQL.SQLCODE
|
|
SET DEFINE OFF
|
|
SET SERVEROUTPUT ON SIZE UNLIMITED
|
|
|
|
CREATE OR REPLACE PROCEDURE create_commerce_activity_job (
|
|
p_job_name IN VARCHAR2,
|
|
p_iterations IN PLS_INTEGER,
|
|
p_seconds_between_iterations IN NUMBER,
|
|
p_average_rows_per_iteration IN NUMBER
|
|
) AS
|
|
l_job_name VARCHAR2(128);
|
|
BEGIN
|
|
IF p_job_name IS NULL OR TRIM(p_job_name) IS NULL THEN
|
|
RAISE_APPLICATION_ERROR(-20010, 'p_job_name must not be empty');
|
|
END IF;
|
|
l_job_name := DBMS_ASSERT.SIMPLE_SQL_NAME(UPPER(TRIM(p_job_name)));
|
|
|
|
IF p_iterations IS NULL OR p_iterations < 0 THEN
|
|
RAISE_APPLICATION_ERROR(-20011, 'p_iterations must be a non-negative integer');
|
|
END IF;
|
|
IF p_seconds_between_iterations IS NULL OR p_seconds_between_iterations < 0 THEN
|
|
RAISE_APPLICATION_ERROR(-20012, 'p_seconds_between_iterations must be non-negative');
|
|
END IF;
|
|
IF p_average_rows_per_iteration IS NULL OR p_average_rows_per_iteration < 0
|
|
OR p_average_rows_per_iteration > 10000 THEN
|
|
RAISE_APPLICATION_ERROR(-20013, 'p_average_rows_per_iteration must be between 0 and 10000');
|
|
END IF;
|
|
|
|
DBMS_SCHEDULER.CREATE_JOB(
|
|
job_name => l_job_name,
|
|
job_type => 'STORED_PROCEDURE',
|
|
job_action => 'SIMULATE_COMMERCE_ACTIVITY',
|
|
number_of_arguments => 3,
|
|
start_date => SYSTIMESTAMP,
|
|
enabled => FALSE,
|
|
auto_drop => FALSE,
|
|
comments => 'Background e-commerce activity simulation'
|
|
);
|
|
|
|
DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(
|
|
job_name => l_job_name,
|
|
argument_position => 1,
|
|
argument_value => TO_CHAR(p_iterations, 'TM9', 'NLS_NUMERIC_CHARACTERS=''.,''')
|
|
);
|
|
DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(
|
|
job_name => l_job_name,
|
|
argument_position => 2,
|
|
argument_value => TO_CHAR(
|
|
p_seconds_between_iterations, 'TM9', 'NLS_NUMERIC_CHARACTERS=''.,'''
|
|
)
|
|
);
|
|
DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(
|
|
job_name => l_job_name,
|
|
argument_position => 3,
|
|
argument_value => TO_CHAR(
|
|
p_average_rows_per_iteration, 'TM9', 'NLS_NUMERIC_CHARACTERS=''.,'''
|
|
)
|
|
);
|
|
|
|
DBMS_SCHEDULER.ENABLE(l_job_name);
|
|
DBMS_OUTPUT.PUT_LINE(
|
|
'Enabled Scheduler job ' || l_job_name ||
|
|
' to run SIMULATE_COMMERCE_ACTIVITY in the background.'
|
|
);
|
|
END;
|
|
/
|
|
|
|
CREATE OR REPLACE PROCEDURE list_commerce_activity_jobs AS
|
|
l_jobs_found PLS_INTEGER := 0;
|
|
BEGIN
|
|
DBMS_OUTPUT.PUT_LINE(
|
|
RPAD('JOB NAME', 32) || RPAD('STATE', 16) ||
|
|
RPAD('ENABLED', 10) || RPAD('RUNS', 8) ||
|
|
RPAD('FAILURES', 10) || 'LAST START'
|
|
);
|
|
DBMS_OUTPUT.PUT_LINE(RPAD('-', 100, '-'));
|
|
|
|
FOR job_rec IN (
|
|
SELECT job_name, state, enabled, run_count, failure_count, last_start_date
|
|
FROM user_scheduler_jobs
|
|
WHERE job_type = 'STORED_PROCEDURE'
|
|
AND job_action = 'SIMULATE_COMMERCE_ACTIVITY'
|
|
ORDER BY job_name
|
|
) LOOP
|
|
l_jobs_found := l_jobs_found + 1;
|
|
DBMS_OUTPUT.PUT_LINE(
|
|
RPAD(job_rec.job_name, 32) ||
|
|
RPAD(job_rec.state, 16) ||
|
|
RPAD(CASE WHEN job_rec.enabled = 'TRUE' THEN 'YES' ELSE 'NO' END, 10) ||
|
|
RPAD(TO_CHAR(job_rec.run_count), 8) ||
|
|
RPAD(TO_CHAR(job_rec.failure_count), 10) ||
|
|
NVL(
|
|
TO_CHAR(job_rec.last_start_date, 'YYYY-MM-DD HH24:MI:SS TZH:TZM'),
|
|
'never'
|
|
)
|
|
);
|
|
END LOOP;
|
|
|
|
IF l_jobs_found = 0 THEN
|
|
DBMS_OUTPUT.PUT_LINE('No SIMULATE_COMMERCE_ACTIVITY Scheduler jobs found.');
|
|
END IF;
|
|
END;
|
|
/
|
|
|
|
CREATE OR REPLACE PROCEDURE stop_commerce_activity_job (
|
|
p_job_name IN VARCHAR2
|
|
) AS
|
|
l_job_name VARCHAR2(128);
|
|
l_job_count PLS_INTEGER;
|
|
BEGIN
|
|
IF p_job_name IS NULL OR TRIM(p_job_name) IS NULL THEN
|
|
RAISE_APPLICATION_ERROR(-20020, 'p_job_name must not be empty');
|
|
END IF;
|
|
l_job_name := DBMS_ASSERT.SIMPLE_SQL_NAME(UPPER(TRIM(p_job_name)));
|
|
|
|
SELECT COUNT(*)
|
|
INTO l_job_count
|
|
FROM user_scheduler_jobs
|
|
WHERE job_name = l_job_name
|
|
AND job_type = 'STORED_PROCEDURE'
|
|
AND job_action = 'SIMULATE_COMMERCE_ACTIVITY';
|
|
IF l_job_count = 0 THEN
|
|
RAISE_APPLICATION_ERROR(-20021, 'No activity Scheduler job named ' || l_job_name);
|
|
END IF;
|
|
|
|
DBMS_SCHEDULER.DISABLE(
|
|
name => l_job_name,
|
|
force => TRUE
|
|
);
|
|
DBMS_OUTPUT.PUT_LINE('Stopped and disabled Scheduler job ' || l_job_name || '.');
|
|
END;
|
|
/
|
|
|
|
CREATE OR REPLACE PROCEDURE remove_commerce_activity_job (
|
|
p_job_name IN VARCHAR2
|
|
) AS
|
|
l_job_name VARCHAR2(128);
|
|
l_job_count PLS_INTEGER;
|
|
BEGIN
|
|
IF p_job_name IS NULL OR TRIM(p_job_name) IS NULL THEN
|
|
RAISE_APPLICATION_ERROR(-20030, 'p_job_name must not be empty');
|
|
END IF;
|
|
l_job_name := DBMS_ASSERT.SIMPLE_SQL_NAME(UPPER(TRIM(p_job_name)));
|
|
|
|
SELECT COUNT(*)
|
|
INTO l_job_count
|
|
FROM user_scheduler_jobs
|
|
WHERE job_name = l_job_name
|
|
AND job_type = 'STORED_PROCEDURE'
|
|
AND job_action = 'SIMULATE_COMMERCE_ACTIVITY';
|
|
IF l_job_count = 0 THEN
|
|
RAISE_APPLICATION_ERROR(-20031, 'No activity Scheduler job named ' || l_job_name);
|
|
END IF;
|
|
|
|
DBMS_SCHEDULER.DROP_JOB(
|
|
job_name => l_job_name,
|
|
force => TRUE
|
|
);
|
|
DBMS_OUTPUT.PUT_LINE('Removed Scheduler job ' || l_job_name || '.');
|
|
END;
|
|
/
|
|
|
|
SHOW ERRORS PROCEDURE create_commerce_activity_job
|
|
SHOW ERRORS PROCEDURE list_commerce_activity_jobs
|
|
SHOW ERRORS PROCEDURE stop_commerce_activity_job
|
|
SHOW ERRORS PROCEDURE remove_commerce_activity_job
|