Oracle Job 定時器簡單例項

2021-06-09 15:11:56 字數 3008 閱讀 7450

--首先要建立乙個測試資料庫.

create table test_tbl

( id number(12) not null,

c_data date

)--建立乙個序列.

create sequence test_seq

minvalue 1

maxvalue 999999999999999999999999999

start with 1

increment by 1

cache 20;

--建立乙個job呼叫的儲存過程.

create or replace procedure test_pro

isbegin

insert into test_tbl values(test_seq.nextval, sysdate);

dbms_output.put_line(sysdate);

end;

--呼叫submit方法來設定job例項.

declare

job number;

begin

sys.dbms_job.submit(job, --返回引數,用來接收job的id.

'test_pro;', --執行儲存過程名.

to_date('2012-09-18 22:22:22', 'yyyy-mm-dd hh24:mi:ss'), --執行時間.

'sysdate+1/1440'); --每天1440次.也就是說一分鐘執行一次.

end;

--查詢現有的job例項.

select * from dba_jobs

--呼叫run方法開始執行job.

begin

dbms_job.run(25);

end;

--呼叫remove方法刪除job.

begin

dbms_job.remove(24);

end;

--查詢以上方法是否成功.是否有資料寫入.

select count(*) from (select * from test_tbl order by id)

--刪除環境表.

drop table test_tbl

--刪除測試儲存過程.

drop procedure test_pro

dbms_job package 用法介紹

包含以下子過程:

broken()過程。

change()過程。

interval()過程。

isubmit()過程。

next_date()過程。

remove()過程。

run()過程。

submit()過程。

user_export()過程。

what()過程。

1、broken()過程更新乙個已提交的工作的狀態,典型地是用來把乙個已破工作標記為未破工作。

這個過程有三個引數:job 、broken與next_date。

procedure broken (job    in binary_integer,

broken  in boolean,

next_date in date :=sysdate)

job引數是工作號,它在問題中唯一標識工作。

broken引數指示此工作是否將標記為破——true說明此工作將標記為破,而flase說明此工作將標記為未破。 bitscn.com

next_date引數指識何時將執行這個工作。

interval引數何時這個工作將被重執行。

no_parse引數指示此工作在提交時或執行時是否應進行語法分析——true指示此pl/sql**在它第一次執行時應進行語法分析,而false指示本pl/sql**應立即進行語法分析。

9、user_export()過程返回乙個命令,此命令用來安排乙個存在的工作以便此工作能重新提交。

此程式有兩個引數:job與my_call。

procedure user_export(job    in binary_ineger,

my_call  in out varchar2)

job引數標識乙個安排了的工作。my_call引數包含在它的當前狀態重新提交此工作所需要的正文。

10、what()過程應許在工作執行時重新設定此正在執行的命令。這個過程接收兩個引數:job與what。

procedure what (job in binary_ineger,

what in out varchar2)

job引數標識乙個存在的工作。what引數指示將被執行的新的pl/sql**。

正在執行的job相關資訊

select sid, r.job, log_user, r.this_date, r.this_sec

from dba_jobs_running r, dba_jobs j

where r.job = j.job;

描述                    interval引數值

每天午夜12點            'trunc(sysdate + 1)'

每天早上8點30分         'trunc(sysdate + 1) + (8*60+30)/(24*60)'

每星期二中午12點         'next_day(trunc(sysdate ), ''tuesday'' ) + 12/24'

每個月第一天的午夜12點    'trunc(last_day(sysdate ) + 1)'

每個季度最後一天的晚上11點 'trunc(add_months(sysdate + 2/24, 3 ), 'q' ) -1/24'

每星期六和日早上6點10分    'trunc(least(next_day(sysdate, ''saturday"), next_day(sysdate, "sunday"))) + (6×60+10)/(24×60)'

Oracle Job定時器的寫法

1 每分鐘執行 interval trunc sysdate,mi 1 24 60 2 每天定時執行 例如 每天的凌晨1點執行 interval trunc sysdate 1 1 24 3 每週定時執行 例如 每週一凌晨1點執行 interval trunc next day sysdate,星期...

簡單定時器實現

經常會遇到這樣的功能,需要開闢乙個執行緒同時迴圈的跑乙個任務,下面是簡單實現的 呼叫select 加超時時間 include include include include include void thread client timeout const void arg printf time o...

簡單軟體定時器

軟體定時器 在嵌入式開發中,定時器是及其常見的,但考慮到晶元外設資源有限,可以自己寫乙個軟體定時器,應用於對計時不是太嚴格的場合,比如led的閃爍,定時處理某一任務等等。該軟體定時器的原理是基於滴答系統時鐘中斷,在中斷中獲得時間基,該時間基可由使用者自由設定。另外有兩種方式可以實現軟體定時處理功能,...