小试牛刀-嘿嘿,创建job了

时间:2024-01-21 22:52:33

今天 周六,我写了这个存储过程。用意:检查 数据库中是否有 该类的 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;
/