Improved one time job creation

This commit is contained in:
Jan Kvetina 2022-01-24 21:12:59 +01:00
parent fb582406db
commit 8d915d8862
2 changed files with 68 additions and 26 deletions

View File

@ -1041,13 +1041,20 @@ CREATE OR REPLACE PACKAGE app AS
-- --
-- Proper way how to schedule one time jobs -- Proper/single way how to schedule one time jobs
-- --
PROCEDURE create_one_time_job ( PROCEDURE create_job (
in_job_name VARCHAR2, in_job_name VARCHAR2,
in_statement VARCHAR2 := NULL, in_statement VARCHAR2,
in_comments VARCHAR2 := NULL, in_user_id sessions.user_id%TYPE := NULL,
in_priority PLS_INTEGER := NULL in_app_id sessions.app_id%TYPE := NULL,
in_session_id sessions.session_id%TYPE := NULL,
in_priority PLS_INTEGER := NULL,
in_start_date DATE := NULL,
in_enabled BOOLEAN := TRUE,
in_autodrop BOOLEAN := TRUE,
in_comments VARCHAR2 := NULL
);
); );

View File

@ -2161,38 +2161,73 @@ CREATE OR REPLACE PACKAGE BODY app AS
PROCEDURE create_one_time_job ( PROCEDURE create_job (
in_job_name VARCHAR2, in_job_name VARCHAR2,
in_statement VARCHAR2 := NULL, in_statement VARCHAR2,
in_comments VARCHAR2 := NULL, in_user_id sessions.user_id%TYPE := NULL,
in_priority PLS_INTEGER := NULL in_app_id sessions.app_id%TYPE := NULL,
in_session_id sessions.session_id%TYPE := NULL,
in_priority PLS_INTEGER := NULL,
in_start_date DATE := NULL,
in_enabled BOOLEAN := TRUE,
in_autodrop BOOLEAN := TRUE,
in_comments VARCHAR2 := NULL
) AS ) AS
v_log_id logs.log_id%TYPE; v_log_id logs.log_id%TYPE;
v_job_name user_scheduler_jobs.job_name%TYPE;
v_action VARCHAR2(32767);
BEGIN BEGIN
v_log_id := app.log_module(in_job_name, in_statement, in_comments, in_priority); v_log_id := app.log_module_json (
'job_name', in_job_name,
'statement', in_statement,
'user_id', in_user_id,
'app_id', in_app_id,
'session_id', in_session_id,
'priority', in_priority,
'start_date', in_start_date,
'comments', in_comments
);
--
v_job_name := '"' || in_job_name || '#' || v_log_id || '"';
--
v_action :=
'BEGIN' || CHR(10) ||
--
CASE WHEN in_user_id IS NOT NULL THEN
' app.create_session (' || CHR(10) ||
' in_user_id => ''' || in_user_id || ''',' || CHR(10) ||
' in_app_id => ' || NVL(in_app_id, app.get_app_id()) || ',' || CHR(10) ||
' in_session_id => ' || NVL(in_session_id, 0) || CHR(10) ||
' );' || CHR(10)
END ||
--
' app.log_scheduler(' || v_log_id || ', ''' || v_job_name || ''');' || CHR(10) ||
' ' || RTRIM(in_statement, ';') || ';' || CHR(10) ||
' app.log_success(' || v_log_id || ');' || CHR(10) ||
'EXCEPTION' || CHR(10) ||
'WHEN OTHERS THEN' || CHR(10) ||
' app.raise_error();' || CHR(10) ||
'END;';
--
app.log_debug(v_action);
-- --
DBMS_SCHEDULER.CREATE_JOB ( DBMS_SCHEDULER.CREATE_JOB (
in_job_name, job_name => v_job_name,
job_type => 'PLSQL_BLOCK', job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN' || CHR(10) || job_action => v_action,
' app.log_scheduler(' || v_log_id || ', ''' || in_job_name || ''');' || CHR(10) || start_date => in_start_date,
' ' || RTRIM(in_statement, ';') || ';' || CHR(10) ||
' app.log_success();' || CHR(10) ||
'EXCEPTION' || CHR(10) ||
'WHEN OTHERS THEN' || CHR(10) ||
' app.raise_error();' || CHR(10) ||
'END;',
start_date => NULL,
enabled => FALSE, enabled => FALSE,
auto_drop => TRUE, auto_drop => in_autodrop,
comments => v_log_id || '|' || in_comments comments => v_log_id || '|' || in_comments
); );
-- --
IF in_priority IS NOT NULL THEN IF in_priority IS NOT NULL THEN
DBMS_SCHEDULER.SET_ATTRIBUTE(in_job_name, 'JOB_PRIORITY', in_priority); DBMS_SCHEDULER.SET_ATTRIBUTE(v_job_name, 'JOB_PRIORITY', in_priority);
END IF; END IF;
-- --
DBMS_SCHEDULER.ENABLE(in_job_name); IF in_enabled THEN
DBMS_SCHEDULER.ENABLE(v_job_name);
END IF;
-- --
app.log_success(v_log_id); app.log_success(v_log_id);
EXCEPTION EXCEPTION