今天 周六,我写了这个存储过程。用意:检查 数据库中是否有 该类的 job,如果有那么取job_name 赋值给 job_old, 把job_old加上时间戳 改造成 job_new。那么job_old 和job_new 名称是相似的,完成第一步;第二步 if判断 ,如果系统中有 job,那么删除 旧的job。第三步 采用新的job_new 创建新的job。以此类推
CREATE OR REPLACE PROCEDURE CREATE_DROP_JOB_OK
AS
JOB_OLD_NAME VARCHAR2(20);
JOB_NEW_NAME VARCHAR2(20);
BEGIN
JOB_NEW_NAME :=‘JOB_BOOK_YUQI‘||TO_CHAR(SYSDATE,‘SS‘) ; --给新job命名
SELECT JOB_NAME INTO JOB_OLD_NAME FROM USER_SCHEDULER_JOBS WHERE JOB_NAME LIKE ‘JOB_BOOK_YUQI%‘;
--检查数据库中已经存在的旧job,取出job_name 传给变量 job_old_name
IF JOB_OLD_NAME IS NOT NULL THEN
DBMS_OUTPUT.put_line(‘JOB_OLD_NAME IS ‘||JOB_OLD_NAME); --输出job_old_name 确认是否准确
DBMS_OUTPUT.put_line(JOB_OLD_NAME||‘ IS Being droped ‘||TO_CHAR(SYSDATE,‘YYYY-MM-DD HH24:MI:SS‘));
SYS.DBMS_SCHEDULER.DROP_JOB(JOB_NAME=> JOB_OLD_NAME); --删除job
END IF;
DBMS_OUTPUT.put_line(‘JOB_NEW_NAME IS ‘||JOB_NEW_NAME); --输出job_new_name 确认是否准确
DBMS_OUTPUT.put_line(JOB_NEW_NAME||‘ IS Being created ‘|| TO_CHAR(SYSDATE,‘YYYY-MM-DD HH24:MI:SS‘));
DBMS_SCHEDULER.CREATE_JOB(JOB_NAME => JOB_NEW_NAME, --指定job的名称
JOB_TYPE => ‘STORED_PROCEDURE‘, --指定job操作的类型
JOB_ACTION => ‘BOOK_YUQI‘, --指定job的操作
START_DATE => TO_DATE(‘20-08-2015 17:13:20‘, ‘DD-MM-YYYY HH24:MI:SS‘), --指定job开始运行的时间
REPEAT_INTERVAL => ‘FREQ=MINUTELY;INTERVAL=1‘, --指定job运行的频率 ,常见的 daily、minutely
-- END_DATE => TO_DATE(‘21-08-2015 17:13:20‘, ‘DD-MM-YYYY HH24:MI:SS‘), --指定job结束运行的时间
JOB_CLASS => ‘DEFAULT_JOB_CLASS‘, --指定job的级别
ENABLED => TRUE, --创建job后是否启用job
AUTO_DROP => FALSE, --job是否自动删除 (默认情况下 job运行成功后,会自动删除)
COMMENTS => ‘MY NEW JOB‘);
EXCEPTION WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE(SQLCODE||SQLERRM);
END CREATE_DROP_JOB_OK;
/