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;
参数说明:
- proc_del_hb_pollutantdateh 存储过程名
- hb_pollutantdateh、hb_pollutantdatem 表名
- 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;
参数说明:
- fun_Name 需要执行的存储过程名称或SQL语句
- time1 初次执行时间
- 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,默认截去小数点后面的部分;