设置job属性,让它抛出事件:
在sys用户下建立下面的job
在测试用户test下执行下面的语句,就可以看到效果了
BEGIN
dbms_scheduler.drop_job(job_name => 'scheduler_job_test');
END;
/
BEGIN
dbms_scheduler.create_job(job_name => 'scheduler_job_test',
job_type => 'PLSQL_BLOCK',
job_action => 'begin null; end;',
start_date => SYSDATE,
repeat_interval => 'FREQ=MINUTELY; INTERVAL=1;BYSECOND=0,5,10,15,20,25,30,35,40,45,50,55');
END;
/
BEGIN
dbms_scheduler.set_attribute('SCHEDULER_JOB_TEST',
'raise_events',
dbms_scheduler.job_all_events);
END;
/
在sys用户下建立下面的job
BEGIN
dbms_scheduler.drop_job(job_name => 'event_based_job');
END;
/
BEGIN
dbms_scheduler.create_job(job_name => 'event_based_job',
job_type => 'PLSQL_BLOCK',
job_action => 'begin INSERT INTO test.t_job_test VALUES (SYSDATE, ''event_based_job''); end;',
start_date => SYSDATE,
event_condition => 'tab.user_data.object_name = ''SCHEDULER_JOB_TEST'' and tab.user_data.event_type = ''JOB_SUCCEEDED''',
queue_spec => 'SCHEDULER$_EVENT_QUEUE',
enabled => TRUE);
END;
在测试用户test下执行下面的语句,就可以看到效果了
SQL> exec dbms_scheduler.run_job('SCHEDULER_JOB_TEST');
PL/SQL procedure successfully completed
SQL> select * from t_job_test;
CREATED DES
----------- --------------------------------------------------
2014-08-16 event_based_job
1 row selected
SQL> exec dbms_scheduler.run_job('SCHEDULER_JOB_TEST');
PL/SQL procedure successfully completed
SQL> select * from t_job_test;
CREATED DES
----------- --------------------------------------------------
2014-08-16 event_based_job
2014-08-16 event_based_job
2 rows selected
SQL> col created form a20
SQL> exec dbms_scheduler.run_job('SCHEDULER_JOB_TEST');
PL/SQL procedure successfully completed
SQL> select * from t_job_test;
CREATED DES
-------------------- --------------------------------------------------
2014-08-16 08:19:44 event_based_job
2014-08-16 08:19:49 event_based_job
2014-08-16 08:30:43 event_based_job
3 rows selected
SQL>