--创建存储过程 //括号中为参数
CREATE OR REPLACE PROCEDURE IS_MARKET_AWARDS_SP(STATIS_DATE VARCHAR2) IS
/*********************************************************************************** name: IS_MARKET_AWARDS_SP
* abstract: 生成:修改已過期獲獎狀態
* version: v1.0
* description:
* 依赖表:
* 《活動定義表》 : Is_makerting_general_activity
* 目标表:
* 《用戶獲獎表》 : is_makerting_exchange_awards
* parameters:
* STATIS_DATE 周期(日)
* author: XXX
**********************************************************************************/
V_STATDATE VARCHAR2(12);
BEGIN
/** 处理周期
IF STATIS_DATE IS NULL THEN
V_STATDATE := TO_CHAR(SYSDATE, -1, 'YYYYMMDD');
ELSE
V_STATDATE := STATIS_DATE;
END IF;**/
/** 修改数据 **/
UPDATE IS_MAKERTING_EXCHANGE_AWARDS T
SET T.STATUS = '3'
WHERE T.ID IN (SELECT E.ID
FROM IS_MAKERTING_EXCHANGE_AWARDS E,
IS_MAKERTING_GENERAL_ACTIVITY C
WHERE E.STATUS = '1'
AND E.USE_DATE IS NULL
AND C.AWARD_END_TIME < SYSDATE);
COMMIT;
END IS_MARKET_AWARDS_SP;
--手动执行存储过程
begin
is_market_awards_sp('');
end;
--定时执行存储过程(定时JOB有问题)
create or replace procedure is_market_awards_job as
begin
declare
job number;
BEGIN
DBMS_JOB.SUBMIT(
JOB => job, /*自动生成JOB_ID*/
WHAT => 'is_market_awards_sp;', /*需要执行的过程或SQL语句*/
/*NEXT_DATE => sysdate, */ /*初次执行时间,立刻执行*/
/*INTERVAL => 'sysdate+3/(24*60*60)' */ /*执行周期 -每3秒钟*/
NEXT_DATE => TRUNC(sysdate+1), /*初次执行时间,12点30分*/
INTERVAL => TRUNC(sysdate+1) /*每天12点30分*/
);
COMMIT;
DBMS_JOB.RUN(job);
end;
end is_market_awards_job;
- 1:每分钟执行
- Interval => TRUNC(sysdate,'mi') + 1/ (24*60) --每分钟执行
- interval => 'sysdate+1/(24*60)' --每分钟执行
- interval => 'sysdate+1' --每天
- interval => 'sysdate+1/24' --每小时
- interval => 'sysdate+2/24*60' --每2分钟
- interval => 'sysdate+30/24*60*60' --每30秒
- 2:每天定时执行
- Interval => TRUNC(sysdate+1) --每天凌晨0点执行
- Interval => TRUNC(sysdate+1)+1/24 --每天凌晨1点执行
- Interval => TRUNC(SYSDATE+1)+(8*60+30)/(24*60) --每天早上8点30分执行
- 3:每周定时执行
- Interval => TRUNC(next_day(sysdate,'星期一'))+1/24 --每周一凌晨1点执行
- Interval => TRUNC(next_day(sysdate,1))+2/24 --每周一凌晨2点执行
- 4:每月定时执行
- Interval =>TTRUNC(LAST_DAY(SYSDATE)+1) --每月1日凌晨0点执行
- Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24 --每月1日凌晨1点执行
- 5:每季度定时执行
- Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'q') --每季度的第一天凌晨0点执行
- Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'q') + 1/24 --每季度的第一天凌晨1点执行
- Interval => TRUNC(ADD_MONTHS(SYSDATE+ 2/24,3),'q')-1/24 --每季度的最后一天的晚上11点执行
- 6:每半年定时执行
- Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24 --每年7月1日和1月1日凌晨1点
- 7:每年定时执行
- Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24 --每年1月1日凌晨1点执行
- 相关方法:
- 修改要执行的操作:dbms_job.what(jobno,'sp_fact_charge_code;'); --修改某个job名
- 修改下次执行时间:dbms_job.next_date(job,next_date);
- 修改间隔时间:dbms_job.interval(job,interval);
- 停止job:dbms.broken(job,broken,nextdate);
- dbms_job.broken(v_job,true,next_date); --停止一个job,里面参数true也可是false,next_date(某一时刻停止)也可是sysdate(立刻停止)。
- */