oracle简单的存储过程以及job示例

来源:互联网 发布:php二次开发有前途没 编辑:程序博客网 时间:2024/05/16 17:38

最近需要oracle循环定时执行一段sql语句,然后需要建立存储过程,本人的sql语句属于DML语句,步骤如下:

1、创建存储过程

create or replace procedure cube_day asbegininsert into prov_day_weather(select  '22' as 路径,date_cal as 日期, '22' indi,to_char(sr_avg_temp) as value from sr_anhui_day_prov a,(select to_char(sysdate-1,'yyyy/mm/dd') as time from dual) d where to_char(a.date_cal,'yyyy/mm/dd') = d.time);insert into day_weather(select  key2 as 路径,date_cal as 日期, '22' indi,min_temperature as value from COMPUTE_anhui_DAY_2 a,area_id2 b,(select to_char(sysdate-1,'yyyy/mm/dd') as time from dual) d where a.area_id = b.路径 and to_char(a.date_cal,'yyyy/mm/dd') = d.time);commit;end;
注意sql语句要写对;

2、创建定时任务job

DECLARE  job3 NUMBER;BEGIN  DBMS_JOB.SUBMIT(job3,'cube_day;',to_date('02/24/2017 12:00:00','mm/dd/yyyy hh24:mi:ss'),'TRUNC(SYSDATE+1) + 12/24');END;
这样一个简单的循环定时执行sql语句就完成了。

3、查看

select job,broken,what,interval,t.* from user_jobs t; 

字段解释:

job: 指的是job的id号。比如下面的 23

failures:job执行的时候失败次数,如果超过了15次,那么broken列将被标为Y,以后就不会运行该job了

broken:默认为N,如果为Y,意味着不再执行该job!

interval:执行job的间隔时间。

what:该job的实际工作

4、停止job
begin   dbms_job.remove(23); end;/
其中23是job的id号。


备注:interval常用的介绍:

TRUNC(SYSDATE+1)   :每天凌晨

TRUNC(SYSDATE+7)   :每七天凌晨

TRUNC(SYSDATE+30)   :每30天凌晨

NEXT_DAY(TRUNC(SYSDATE), ''SUNDAY'')  :每周日凌晨

TRUNC(SYSDATE+1)+6/24  :每天6点

SYSDATE+30/1440          : 每30分钟

TRUNC(LAST_DAY(SYSDATE)) + 1   :每月第一天凌晨

TRUNC(LAST_DAY(SYSDATE)) + 1 + 8/24 + 30/1440    : 每月第一天8点半






0 0
原创粉丝点击