因為工作需要,每天半夜定時更新某個字段,就寫了乙個定時任務呼叫乙個儲存過程,都是一些簡單的操作。
首先看下儲存過程,
create or replace procedure chan_contract_nowork is
begin
update basic_contract_labor
set
whether_effective = 'n',
whether_effective_chs = '否'
where contract_seq = '1'
and to_date(contract_end_date,'yyyy-mm-dd') < to_date(to_char(sysdate,'yyyy-mm-dd'),'yyyy-mm-dd');
commit;
end;
drop procedure chan_contract_nowork;//附送的刪除儲存過程的語句
就是一條判斷當前日期是否大於結束日期來修改某些欄位的簡單語句。因為我建表的時候,contract_end_date是varchar2型別,所以要轉換成date型別,然後把當前時間轉成對應的char型別再裝成相應格式的date型別進行比較。
然後看下建立job的語句
declare jobno number;//生成job的id
begin
dbms_job.submit(
jobno, //jobid
'chan_contract_nowork;', //執行的儲存過程
sysdate, 現在執行
'trunc(sysdate) + 1 +2 / (24)' //設定間隔時間
);
commit;
end;
有件好玩的事情是我不知道dbms_job 是 oracle預設某個方法什麼的,以為job的名字,然而job 沒有名字。然後,注意commit,因為是在job表裡插入資料所以,還是一定不能忽略commit的好。
當然如果不設定執行時間為sysdate,現在執行的話,就需要執行語句了。下面附送幾條對job的其他操作語句。
1:執行語句
begin
dbms_job.run(40); /*40 job的id*/
end;
2:刪除語句
begin
/*刪除自動執行的job*/
dbms_job.remove(40);
end;
3:停止語句
dbms.broken(job,broken,nextdate);dbms_job.broken(v_job,true,next_date); /*停止乙個job,裡面引數true也可是false,next_date(某一時刻停止)也可是sysdate(立刻停止)。 */
4.修改間隔時間
dbms_job.interval(job,interval);
5.修改下次執行時間
dbms_job.next_date(job,next_date);
6.修改要執行的操作
dbms_job.what(jobno,'change_code;'); --修改執行另乙個儲存過程
還有對job的查詢
a:檢視執行結果
select * from test_job order by test_job.para_date desc;
b:
檢視job
select * from sys.user_jobs
c:
查詢是否job還在running,當然job的執行時間不很短
select * from dba_jobs_running
orace 建立乙個job
declare job binary integer 任務id v begin date 開始時間 v interval varchar2 50 時間間隔 begin v begin sysdate 當前時間開始執行 v interval trunc sysdate,mi 1 24 60 每分鐘執行...
ORACLE如何停止乙個JOB
oracle 如何停止乙個 job dba jobs all jobs user jobs 包含登入使用者所有的 job資訊 dba jobs running 包含正在執行 job相關資訊 注意 須使用oracle 的sys 使用者登入到資料庫,才能檢視 dba jobs running,v pro...
乙個簡單的定時任務小例子
強制 執行緒資源必須通過執行緒池提供,不允許在應用中自行顯式建立執行緒。說明 使用執行緒池的好處是減少在建立和銷毀執行緒上所花的時間以及系統資源的開銷,解決資 源不足的問題。如果不使用執行緒池,有可能造成系統建立大量同類執行緒而導致消耗完記憶體或者 過度切換 的問題。強制 執行緒池不允許使用 exe...