2015-07-22 102 views
0

我创建了一个删除一个表的oracle作业调度程序。之后,我想立即放弃该作业调度程序。因此,我只在该调度程序中写入了DROP_JOB命令,但获取错误对象不存在。这个错误即将到来,因为我还没有创建作业调度程序,并试图放弃相同的调度程序。建议其他方式来完成这项任务。我不想手动删除作业调度程序。在完成作业操作后删除oracle作业调度程序

请参考下面的代码: -

BEGIN 
DBMS_SCHEDULER.CREATE_JOB (
     job_name => '"SAPSMC"."V"', 
     job_type => 'PLSQL_BLOCK', 
     job_action => 'BEGIN 
         EXECUTE IMMEDIATE ''DROP TABLE STUDENT''; 
         END;', 
     number_of_arguments => 0, 
     start_date => NULL, 
     repeat_interval => NULL, 
     end_date => NULL, 
     enabled => FALSE, 
     auto_drop => FALSE, 
     comments => ''); 

DBMS_SCHEDULER.DROP_JOB(
job_name   => 'V', 
defer   => TRUE, 
commit_semantics => 'TRANSACTIONAL'); 



DBMS_SCHEDULER.SET_ATTRIBUTE( 
     name => '"SAPSMC"."V"', 
     attribute => 'logging_level', value => DBMS_SCHEDULER.LOGGING_OFF); 
DBMS_SCHEDULER.SET_ATTRIBUTE( 
     name => '"SAPSMC"."V"', 
     attribute => 'raise_events', value => '32'); 



DBMS_SCHEDULER.enable(
     name => '"SAPSMC"."V"'); 
END; 
+0

请'auto_drop => TRUE'在你的代码。我认为这将符合要求。 – Crazy2crack

回答

1

试试下面的代码。您必须将auto_drop属性设置为true

参考:Documentation

BEGIN 
DBMS_SCHEDULER.CREATE_JOB (
     job_name => '"SAPSMC"."V"', 
     job_type => 'PLSQL_BLOCK', 
     job_action => 'BEGIN 
         EXECUTE IMMEDIATE ''DROP TABLE STUDENT''; 
         END;', 
     number_of_arguments => 0, 
     start_date => NULL, 
     repeat_interval => NULL, 
     end_date => NULL, 
     enabled => FALSE, 
     auto_drop => TRUE, 
     comments => ''); 


DBMS_SCHEDULER.SET_ATTRIBUTE( 
     name => '"SAPSMC"."V"', 
     attribute => 'logging_level', value => DBMS_SCHEDULER.LOGGING_OFF); 
DBMS_SCHEDULER.SET_ATTRIBUTE( 
     name => '"SAPSMC"."V"', 
     attribute => 'raise_events', value => '32'); 



DBMS_SCHEDULER.enable(
     name => '"SAPSMC"."V"'); 
END;