完成作业操作后删除 oracle 作业调度程序

Drop the oracle job scheduler after completing the job action

我创建了一个 oracle 作业调度程序,其中删除了一个 table。之后我想立即删除该作业调度程序。所以,我只在那个调度程序中编写了 DROP_JOB 命令,但是获取错误对象是不存在的。出现此错误是因为我尚未创建作业调度程序并试图删除相同的调度程序。建议其他方法来完成此任务。我不想手动删除作业调度程序。

请参考以下代码:-

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;

试试下面的代码。您必须将 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;