oracle簡單的儲存過程以及job示例
阿新 • • 發佈:2019-01-03
最近需要oracle迴圈定時執行一段sql語句,然後需要建立儲存過程,本人的sql語句屬於DML語句,步驟如下:
1、建立儲存過程
注意sql語句要寫對;create or replace procedure cube_day as begin insert 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;
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、停止jobbegin
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點半