If you use the package DBMS_SCHEDULER it can offer you a better and easy support.
Here is the generic approach:
BEGIN
dbms_scheduler.create_job(
job_name => [Unique identifier],
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN [code to run ]END;',
start_date => [a date],
repeat_interval => 'freq=secondly;',
end_date => [a date],
enabled => TRUE,
auto_drop => TRUE
);
dbms_scheduler.set_attribute (
NAME => [Unique identifier],
ATTRIBUTE => 'max_failures',
VALUE => [your deisred value] --> how many times it can fail before to stop the execution
);
dbms_scheduler.set_attribute (
NAME => [Unique identifier],
ATTRIBUTE => 'max_runs',
VALUE => [your deisred value] --> how many times it will be executed (independently of the result) before to stop the execution
);
END;
/
An example:
BEGIN
dbms_scheduler.create_job(
job_name => 'CREATE_NEW_RUN_' || sysdate,
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN READER_PACKAGE.MAIN(to_date(''' || sysdate || ''', ''dd-mm-yyyy'')); END;',
start_date => SYSTIMESTAMP,
repeat_interval => 'freq=secondly;',
end_date => NULL,
enabled => TRUE,
auto_drop => TRUE
);
dbms_scheduler.set_attribute (
NAME => 'CREATE_NEW_RUN_' || sysdate,
ATTRIBUTE => 'max_failures',
VALUE => 1);
dbms_scheduler.set_attribute (
NAME => 'CREATE_NEW_RUN_' || sysdate,
ATTRIBUTE => 'max_runs',
VALUE => 1);
END;
/
How to check the status of the jobs?
SELECT
job_name,
enabled,
run_count,
max_runs,
failure_count,
max_failures
FROM dba_scheduler_jobs
WHERE job_name = decode(upper('&1'), 'ALL', job_name, upper('&1'));
Reference:
http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_sched.htm
Nessun commento:
Posta un commento