1. 程式人生 > >oracle簡單的儲存過程以及job示例

oracle簡單的儲存過程以及job示例

最近需要oracle迴圈定時執行一段sql語句,然後需要建立儲存過程,本人的sql語句屬於DML語句,步驟如下:

1、建立儲存過程

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;
注意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點半