如何使用 DBMS_SCHEDULER“创建或替换”Oracle 作业?

问题描述 投票:0回答:1
我正在开发的程序有多个不同的环境,其中一些环境中没有安排特定的作业。使用数据库的迁移脚本同步它们的最佳方法是什么?

我尝试使用

dbms_scheduler.create_job()

 创建作业,但在已经存在的环境中,会抛出错误,指出“尝试创建一个名称已被同一架构中的另一个对象使用的对象。 ”.

之后,我尝试使用

dbms_scheduler.drop_job()

 删除现有作业,但在该作业不存在的环境中,会抛出错误,指出“指定的对象不存在,未授予权限,或者该对象属于类型错误。”。

有办法创建或替换工作吗?

oracle-database dbms-scheduler dbms-job
1个回答
0
投票
没有“创建或替换作业”语法。但解决这个问题并不难。检查作业是否存在,如果存在则删除它,然后创建它。

DECLARE l_job VARCHAR2(100) := 'MY_JOB'; FUNCTION job_exists (job_name_i VARCHAR2) RETURN BOOLEAN IS l_dummy INTEGER; BEGIN SELECT 1 INTO l_dummy FROM user_scheduler_jobs WHERE job_name = job_name_i; RETURN true; EXCEPTION WHEN NO_DATA_FOUND THEN RETURN false; END; BEGIN IF job_exists(job_name_i => l_job) THEN dbms_scheduler.drop_job ('MY_JOB'); END IF; dbms_scheduler.create_job( job_name => 'MY_JOB' ,job_type => 'PLSQL_BLOCK' ,job_action => 'BEGIN NULL; END;' ); END; /
    
© www.soinside.com 2019 - 2024. All rights reserved.