Oracle 11g 存储过程实现

1、查询job存储过程

select * from user_jobs;

 查询结果如下:

 其中Job代表执行job的id。

2、创建一个存储过程

/* 创建数据表存储过程*/
create or replace procedure proc_del_hb_pollutantdateh as
begin
  insert into hb_pollutantdateh select * from hb_pollutantdatem where ariTime=  to_char(sysdate-numtodsinterval(2,'minute'),'YYYY-MM-DD HH24:MI');/*查询 hb_pollutantdatem 满足条件数据后插入hb_pollutantdateh表*/
  commit;
end;

参数说明:

  1. proc_del_hb_pollutantdateh  存储过程名
  2. hb_pollutantdateh、hb_pollutantdatem 表名
  3. ariTime、minute 表字段

这里就创建完成一个存储过程,其实就是一段Sql语句。

3、创建一个job去执行存储过程

格式:

declare
  job number;
BEGIN
  DBMS_JOB.SUBMIT(  
        JOB => job,  /*自动生成JOB_ID*/  
        WHAT => 'fun_Name',  /*需要执行的存储过程名称或SQL语句*/  
        NEXT_DATE => time1,  /*初次执行时间-下一个2分钟*/  
        INTERVAL => 'time2' /*每天一点执行一次 */
      );  
  commit;
end;

参数说明:

  1. fun_Name 需要执行的存储过程名称或SQL语句
  2. time1 初次执行时间
  3. time2 每次执行时间

实例如下:

declare
  job number;
BEGIN
  DBMS_JOB.SUBMIT(  
        JOB => job,  /*自动生成JOB_ID*/  
        WHAT => 'proc_del_hb_pollutantdateh;',  /*需要执行的存储过程名称或SQL语句*/  
        NEXT_DATE => sysdate+3/(24*60),    /*初次执行时间-下一个3分钟*/  
        INTERVAL => 'trunc(sysdate,''mi'')+10/(24*60)' /*每十分钟执行一次*/
      );  
  commit;
end;

4、调用 job

begin
   DBMS_JOB.RUN(24); /*24 job的id*/
 end;

5、停止 job

begin   
  DBMS_JOB.broken(jobId,true,next_date);        /*停止一个job,jobId, job的ID,里面参数true也可是false,next_date 某一时刻停止也可是 sysdate 立刻停止。   */
commit;
end;

6、修改 job 的间隔时间 

egin
  DBMS_JOB.interval(jobId,interval);  /*job  jobId job的ID,interval: 计算下一次任务执行的时间表达式*/
  commit;
end;

7、修改定时任务 job 要执行的操作

begin
    DBMS_JOB.what('newProcedures();');   /*newProcedures(); 要更改的新操作名称*/
  commit;
end;

7、 修改下一次执行时间

begin
   DBMS_JOB.next_date(job,next_date); /*job: job 的ID;nex_date:要修改后的计算下一次执行的时间表达式*/
   commit;
end;
   

8、删除 job

begin
  DBMS_JOB.remove(83);  /*删除自动执行的job,参数是 job的id*/
  commit;
end;

9、时间表达式

【trunc(for dates)】TRUNC()函数处理日期

    语法格式:TRUNC(date[,fmt])

  其中:date 一个日期值;fmt 日期格式。

    该日期将按指定的日期格式截取;忽略它则由最近的日期截取。

   示例:

   select trunc(sysdate) from dual;--2017/2/13,返回当前时间
   select trunc(sysdate,'yy') from dual;--2017/1/1,返回当年第一天
   select trunc(sysdate,'mm') from dual;--2017/2/1,返回当月的第一天
   select trunc(sysdate,'d') from dual;--2017/2/12,返回当前星期的第一天,即星期天
   select trunc(sysdate,'dd') from dual;--2017/2/13,返回当前日期,今天是2017/2/13
   select trunc(sysdate ,'HH24') from dual;--2017/2/13 15:00:00,返回本小时的开始时间
   select trunc(sysdate ,'MI') from dual;--2017/2/13 15:13:00,返回本分钟的开始时间

2.【TRUNC(for number)】TRUNC()函数处理number型数字

    语法格式:TRUNC(number[,decimals])

    其中: number 待做截取处理的数值;decimals 指明需保留小数点后面的位数,可选项,忽略它则截去所有的小数部分。

    注意:截取时并不对数据进行四舍五入。

    示例:

    select trunc(123.567,2) from dual;--123.56,将小数点右边指定位数后面的截去;
    select trunc(123.567,-2) from dual;--100,第二个参数可以为负数,表示将小数点左边指定位数后      面的部分截去,即均以0记;
    select trunc(123.567) from dual;--123,默认截去小数点后面的部分;

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凌霜残雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值