Oracle 定時任務詳情

2021-10-06 20:24:42 字數 3584 閱讀 4790

定時任務可以很好的幫助我們執行一些重複性的工作,比如每天一次或者每週一次的定時表檢查,我們根據目的來定義乙個job去執行我們需要的儲存。

那麼首先,我們就需要先定義乙個需要執行的儲存,在job中指的就是waht()。

建立儲存:

create

orreplace

procedure p_ex_cur as

null_excep exception;

--自定義乙個異常

class_new1 class_new2%rowtype;

--定義乙個和class_new的字段型別和名稱一樣的變數

cursor cur_ex is

select

*from class_new2;

--定義乙個顯性游標

begin

for class_new1 in cur_ex loop

--for語句迴圈遍歷游標中的資料

begin

-- 開始begin,end巢狀

if class_new1.class_id is

null

then

--進行if判斷

raise null_excep;

-- 丟擲異常

endif

; exception

when null_excep then

-- 異常丟擲之後的操作

insert

into class_new2 (class_te,class_date)

values

('class_id為空'

,sysdate)

;commit

;end

;-- 結束begin,end巢狀

if class_new1.class_id is

notnull

then

class_new1.class_id:=f_newid;

--將class_id重新賦值

class_new1.class_date:=sysdate;

insert

into class_new3 values

(class_new1.class_id,class_new1.class_name,class_new1.class_te,class_new1.class_date)

;-- 將讀取的游標資料插入到class_new2表;

commit

;endif;

-- 結束if

endloop

;-- 結束迴圈

end;

上述儲存是我們在定時任務中呼叫的儲存。

建立定時任務:

declare

job_number number;

-- 定義乙個number變數

job_number1 number;

-- 定義乙個number變數

cursor cur_ex is

select

max(job)

from user_jobs;

--定義顯性游標

begin

open cur_ex;

-- 開啟游標

fetch cur_ex into job_number1;

--讀取游標

job_number:=job_number+1;

-- 對變數進行賦值(job編號不能重複)

sys.dbms_job.submit(

--建立job.submit

job=

>job_number,

-- job編號

what=

>

'p_ex_cur;'

,-- job所執行的儲存

next_date=

>sysdate+5/

(24*60

),-- job下次執行的時間

interval

=>

'sysdate+1/(24*60)'

-- job執行的間隔時間);

commit

;end

;

到此,我們就建立了乙個在5分鐘之後,執行間隔為1分鐘,執行儲存為我們建立的p_ex_cur 的定時任務了。

下面詳細介紹下定時job的其他功能:

1、暫停排程job:

begin

sys.dbms_job.broken(

job=

>

'123'

, broken=

>

true

,-- 定義broken為真,即刪除

next_date=

>sysdate+1/

(24*60

));--要暫停的時間(一分鐘之後)

commit

;end

;

2、執行排程job:

begin

sys.dbms_job.run(

job=

>

'123'

,force

=>

true

); 定義force為真,即執行

commit

;end

;

3、修改job執行時間間隔:

begin

sys.dbms_job.

interval

( job=

>

'123'

,interval

=>

'sysdate+1/24');

--每小時執行一次job

commit

;end

;

begin

sys.dbms_job.next_date(

job=

>

'123'

, next_date=

>sysdate+1)

;-- 下次執行時間為第二天

commit

;end

;

5、刪除job:

begin

sys.dbms_job.remove(

job=

>

'123');

-- 要刪除的job編號

commit

;end

;

6、修改執行儲存:

begin

sys.dbms_job.what(

job=

>

'123'

, what=

>

'p_ex_cur1;');

-- 要執行的新儲存

commit

;end

;

oracle 定時任務

在pl sql 中執行命名 第一步 開啟乙個sql window 視窗,建立一張測試表 create table test date a date 第二步 建立儲存過程 create or replace procedure test myproc asbegininsert into test d...

oracle定時任務

1.建立儲存過程 create orreplace procedure proc test isbegin insert into test values 1 2 commit end prc job test 2.建立任務 declare job number begin sys.dbms job...

Oracle定時任務

建立表 create table test carno varchar2 30 carinfoid number 建立儲存過程 create or replace procedure pro test ascarinfo id number begin select s carinfoid.next...