您的位置:首页 > 其它

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

2016-05-03 09:46 375 查看
--创建存储过程 //括号中为参数

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(立刻停止)。    

*/  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: