关于一些简单的存储过程知识

7 篇文章 0 订阅
5 篇文章 0 订阅

--创建存储过程 //括号中为参数


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. 1:每分钟执行  
  2. Interval => TRUNC(sysdate,'mi') + 1/ (24*60) --每分钟执行  
  3. interval => 'sysdate+1/(24*60)'  --每分钟执行  
  4. interval => 'sysdate+1'    --每天  
  5. interval => 'sysdate+1/24'   --每小时  
  6. interval => 'sysdate+2/24*60' --每2分钟  
  7. interval => 'sysdate+30/24*60*60'  --每30秒  
  8. 2:每天定时执行  
  9. Interval => TRUNC(sysdate+1)  --每天凌晨0点执行  
  10. Interval => TRUNC(sysdate+1)+1/24  --每天凌晨1点执行  
  11. Interval => TRUNC(SYSDATE+1)+(8*60+30)/(24*60)  --每天早上8点30分执行  
  12. 3:每周定时执行  
  13. Interval => TRUNC(next_day(sysdate,'星期一'))+1/24  --每周一凌晨1点执行  
  14. Interval => TRUNC(next_day(sysdate,1))+2/24  --每周一凌晨2点执行  
  15. 4:每月定时执行  
  16. Interval =>TTRUNC(LAST_DAY(SYSDATE)+1)  --每月1日凌晨0点执行  
  17. Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24  --每月1日凌晨1点执行  
  18. 5:每季度定时执行  
  19. Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'q')  --每季度的第一天凌晨0点执行  
  20. Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'q') + 1/24  --每季度的第一天凌晨1点执行  
  21. Interval => TRUNC(ADD_MONTHS(SYSDATE+ 2/24,3),'q')-1/24  --每季度的最后一天的晚上11点执行  
  22. 6:每半年定时执行  
  23. Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+1/24  --每年7月1日和1月1日凌晨1点  
  24. 7:每年定时执行  
  25. Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+1/24  --每年1月1日凌晨1点执行  
  26.   
  27. 相关方法:  
  28. 修改要执行的操作:dbms_job.what(jobno,'sp_fact_charge_code;');  --修改某个job名  
  29. 修改下次执行时间:dbms_job.next_date(job,next_date);  
  30. 修改间隔时间:dbms_job.interval(job,interval);   
  31. 停止job:dbms.broken(job,broken,nextdate);   
  32. dbms_job.broken(v_job,true,next_date);        --停止一个job,里面参数true也可是false,next_date(某一时刻停止)也可是sysdate(立刻停止)。    
  33. */  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值