ORCALE JOB配置说明与调用配置

1、新建 

 
2、配置参考:
 
 
1)、What值:DAYINIT.RUN;   其中DAYINIT为包名.RUN为一个不带参的存储过程。详细请参考下面此包的写法。
2)、下一个日期,不需要填写,填写间隔的时候,应用就会自动生成下一个日期。
3)、间隔,即设置此JOBS间隔时间触发执行。
每天午夜4点执行:TRUNC(SYSDATE) + 1.167  = TRUNC(SYSDATE + 1) + (4*60)/(24*60)
(4*60)/(24*60)   4点*60分钟/24小时*60分钟。如果不想精确到分钟,可以去掉*60。就如:4/24
 

参考下面的说明。

 
 
一、job里面时间间隔
TRUNC(SYSDATE) + 1 + 7/24
假设你的存储过程名为PROC_RAIN_JM
再写一个存储过程名为PROC_JOB_RAIN_JM
内容是:
///
Create Or Replace Procedure PROC_JOB_RAIN_JM
Is
li_jobno         Number;
Begin
DBMS_JOB.SUBMIT(li_jobno,'PROC_RAIN_JM;',SYSDATE,'TRUNC(SYSDATE + 1)');
End;
///
最后那一项可以参考如下:
每天午夜12点 'TRUNC(SYSDATE + 1)' 
每天早上8点30分 'TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)' 
每星期二中午12点 'NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24' 
每个月第一天的午夜12点 'TRUNC(LAST_DAY(SYSDATE ) + 1)' 
每个季度最后一天的晚上11点 'TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' ) -1/24' 
每星期六和日早上6点10分 'TRUNC(LEAST(NEXT_DAY(SYSDATE, ''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6*60+10)/(24*60)'
其中li_jobno是它的ID,可以通过这个ID停掉这个任务,最后想说的是不要执行多次,你可以在里面管理起来,发现已经运行了就不SUBMIT 
每天运行一次 'SYSDATE + 1' 
每小时运行一次 'SYSDATE + 1/24' 
每10分钟运行一次 'SYSDATE + 10/(60*24)' 
每30秒运行一次 'SYSDATE + 30/(60*24*60)' 
每隔一星期运行一次 'SYSDATE + 7' 
不再运行该任务并删除它 NULL 
每年1月1号零时    trunc(last_day(to_date(extract(year from sysdate)||'12'||'01','yyyy-mm-dd'))+1)
 
 
 
二、包的写法和应用
1)包声明和接口
CREATE OR REPLACE PACKAGE DayInit IS
  -- Author  : LUOQI
  -- Created : 2001-5-15 20:51:11
  -- Purpose : 日初始化数据处理
   errcode               constant integer := -20220;
   exp_Initbusy          exception;      --日终处理正在执行
   PRAGMA EXCEPTION_INIT(exp_Initbusy, -54);
   --日初始化日期
   Initdateid constant PrivatePara.pParaId%type := '52';
   --月结处理时间
   MonthId    constant PrivatePara.pParaId%type := '93';
   orderdayId constant PrivatePara.pParaId%type := '38';
   -- Variable declarations
   PROCEDURE submit;
   PROCEDURE run;
   PROCEDURE job_submit(i_time IN number);
   PROCEDURE job_remove(jobid binary_integer);
END DayInit;
2)包体实现
CREATE OR REPLACE PACKAGE BODY DAYINIT IS
  B_INITDATE DATE;
  --b_busytime  VARCHAR2(10);
  B_SYSDATE  DATE;
  B_SYSMONTH VARCHAR2(6);
  B_SYSPLACE VARCHAR2(20);
  B_SYSID    VARCHAR2(20);
  --b_Initstate CHAR(1);
  B_ORDERDAY INTEGER;
  B_BEGDATE  DATE;
  B_TYPE     CHAR(1);
  B_STATUS   CHAR(1);
  B_NEWDATE  DATE;
  -- Initialization
  PROCEDURE INIT IS
  BEGIN
    B_SYSDATE := TRUNC(SYSDATE);
    B_BEGDATE := SYSDATE;
    INSERT INTO DBUSRSYS.SYSLOG
    VALUES
      (SYSDATE, 'DayInit', '日结开始!日初日期:[' || TRUNC(SYSDATE) || ']');
  END INIT;
  --dayterm procedure start
  PROCEDURE DEL_HISTORYDATA IS
  BEGIN
    DELETE FROM DBUSRSYS.OPERERRORS WHERE TRUNC(OEDATE) < B_SYSDATE - 8;
    DELETE FROM DBUSRSYS.OPERLOG WHERE TRUNC(OLDATE) < B_SYSDATE - 93;
    DELETE FROM SELLHEAD
     WHERE SHDATE < B_SYSDATE - TO_NUMBER(FGETMANAPARA('22'));
    COMMIT;
    INSERT INTO RULEJFHG_LOG
      SELECT * FROM RULEJFHG WHERE JHRENDDATE < B_SYSDATE;
    DELETE FROM RULEJFHG WHERE JHRENDDATE < B_SYSDATE;
    INSERT INTO RULEJFMULTIPLE_LOG
      SELECT * FROM RULEJFMULTIPLE WHERE JMRENDDATE < B_SYSDATE;
    DELETE FROM RULEJFMULTIPLE WHERE JMRENDDATE < B_SYSDATE;
    INSERT INTO RULEZK_LOG
      SELECT *
        FROM RULEZK
       WHERE ZKENDDATE < B_SYSDATE
         AND ZKTIMEMODE = '2';
    DELETE FROM RULEZK
     WHERE ZKENDDATE < B_SYSDATE
       AND ZKTIMEMODE = '2';
    COMMIT;
    DELETE FROM DBUSRSYS.OPERLOGIN;
    DELETE FROM DBUSRVIP.IMP_LMK_TEMP;
    DELETE FROM DBUSRVIP.IMP_LMK_ERRORLOG;
    DELETE FROM DBUSRPOS.POSCURMQRULE;
    DELETE FROM DBUSRPOS.POSTKTINFO;
    COMMIT;
  END DEL_HISTORYDATA;
  PROCEDURE DATAINIT IS
    LRET NUMBER;
  BEGIN
    INSERT INTO SELLMAILJF
      SELECT SYSDATE,
             FGETCRMMKT(SHMANAUNIT, SHMARKET),
             SHSYJID,
             SHINVNO,
             NULL,
             NULL
        FROM SELLHEAD
       WHERE SHJFFLAG = 'N'
         AND SHCUSTNO IS NOT NULL
         AND SHDATE > SYSDATE - 2;
    COMMIT;
    CUSTPOINT.RUNJF;
   /* SP_CUSTSUMFORUPGRADE(B_SYSDATE - 1); --统计会员销售总额
    CUSTUPGRADE.CUSTUPGRADE_AUTO; --自动升降级,延期处理*/
    DEL_HISTORYDATA;
    --Custgrade.Custchangegrade_auto('A');
    CUSTBASE.SP_JFAUTOPRC(B_SYSDATE);
    CUSTBASE.SP_RFMPROC;
    IF FGETMANAPARA('FR') = 'Y' THEN
      SP_CUSTFREEZE_AUTO; --连续365天未消费的卡,自动冻结,但是不注销
    END IF;
    CUSTBASE.SP_BULIDAGELEV;
    if to_char(sysdate,'dd')='01' then
        sp_custsumfl;
   end if;
  EXCEPTION
    WHEN OTHERS THEN
      SP_OPERERRORS('日结处理', SQLCODE, B_SYSPLACE || '--' || SQLERRM);
    
  END;
  PROCEDURE SUBMIT IS
    LRET NUMBER;
  BEGIN
    INIT;
    --日初始化
    DATAINIT;
    INSERT INTO SYSLOG
    VALUES
      (SYSDATE,
       'DayInit',
       '日结结束!日结日期:[' || TO_CHAR(SYSDATE, 'yyyy-mm-DD') ||
       '用时:[' || TO_CHAR(ROUND((SYSDATE - B_BEGDATE) * 24 * 60, 2)) || '分钟' || ']');
    COMMIT;
  EXCEPTION
    WHEN OTHERS THEN
      ROLLBACK;
      SP_OPERERRORS('日结处理', SQLCODE, B_SYSPLACE || '--' || SQLERRM);
      RAISE;
  END SUBMIT;
  --执行过程
   PROCEDURE RUN IS
  BEGIN
    SUBMIT;
  EXCEPTION
    WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE(SUBSTR(B_SYSPLACE || '--' || SQLERRM, 1, 255));
  END RUN;
  PROCEDURE JOB_SUBMIT(I_TIME IN NUMBER) AS
    JOBID  BINARY_INTEGER;
    L_TIME NUMBER;
  BEGIN
    L_TIME := 1 + ROUND(I_TIME / 24, 3);
    DBMS_JOB.SUBMIT(JOB       => JOBID,
                    WHAT      => 'DAYINIT.RUN;',
                    NEXT_DATE => TRUNC(SYSDATE) + L_TIME,
                    INTERVAL  => 'TRUNC(SYSDATE) + ' || TO_CHAR(L_TIME),
                    NO_PARSE  => NULL);
    COMMIT;
    DBMS_OUTPUT.PUT_LINE('JobID = ' || JOBID);
  END JOB_SUBMIT;
  PROCEDURE JOB_REMOVE(JOBID BINARY_INTEGER) AS
  BEGIN
    DBMS_JOB.REMOVE(JOB => JOBID);
    COMMIT;
  END JOB_REMOVE;
END DAYINIT;
 
 
以上代码来源于百货事业部JOBS实现方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值