Oracle 24定時任務

2021-06-26 14:44:36 字數 2885 閱讀 9799

我們有時候會這麼乙個需求:希望資料庫能夠定時的幫我們做某一件事。比如說我們希望資料庫能夠定期的把庫裡面某一張表、或某些表的資料彙總到另外一張彙總表裡面。那麼這個時候我們就可以通過使用資料庫的定期任務來實現這麼乙個功能。

下面我們來舉乙個簡單的例子,假如我們有如下兩張表,t1和

t2。t1及其對應的

sequence:

create table t1(a1 integer primary key, a2 varchar2(20), a3 varchar2(20), a4 date);

create sequence seq_t1 start with 1 increment by 1;

t2及其對應的

sequence

create table t2(a1 integer primary key, a2 varchar2(20), a3 date);

create sequence seq_t2 start with 1 increment by 1;

我們需要在每天凌晨兩點的時候把錶

t1裡面的a2和

a4作為表

t2裡面的a2和

a3插到表t2。

oracle

的定期任務只是定時的執行某乙個任務,但具體是什麼任務還需要我們自己來指定。所以首先我們得來建立自己的任務,任務通常都是乙個儲存過程。這裡我們建立如下儲存過程:

create or replace procedure copy_t1_to_t2 as

starttime date := trunc(sysdate - 1); --昨天0點

endtime date := trunc(sysdate); --今天0點

cursor t1_cursor is

select a2, a4

from t1

where a4 >= starttime

and a4 < endtime; --定義乙個游標查詢t1昨天的記錄

begin

for t in t1_cursor loop

insert into t2 (a1, a2, a3) values (seq_t2.nextval, t.a2, t.a4);--把t1裡面的相關資料插到t2中

commit;--插入一條記錄commit一次

end loop;

end;

建立好任務以後,我們就可以把它提交給

oracle

的定時任務佇列裡面了,這裡我們建立**如下:

sql> var job number;

sql> begin

2    dbms_job.submit(

3          job => :job,

4          what => 'copy_t1_to_t2;',

5          next_date => to_date('2013-11-20 02:00:00','yyyy-mm-dd hh24:mi:ss'),

6          interval => 'trunc(sysdate+1)+2/24'

7    );

8    commit;

9  end;

10  /

其實上面就是在執行

dbms_job

包的submit

這麼一儲存過程,在上面的**裡面我們一共指定了四個引數:

job、

what

、next_date

和interval

。下面我們來介紹一下這四個引數的含義:

job:是乙個輸出引數,代表任務序號,所以我們得先定義乙個

job變數。

what

:輸入引數,表示需要做什麼事,記得別忘記了儲存過程後面的那個分號「;」。

next_date

:輸入引數,日期型別,表示下次執行該任務的時間,在這裡也就是第一次執行該任務的時間。

interval

:輸入引數,字元型別,從字面上看是表示任務之間的時間間隔,實際上它還是表示下次的執行時間,只不過它是不斷變化的,所以通常我們都會寫

sysdate+

某乙個時間,如:

sysdate+1/(24*60)

:表示隔

1分鐘執行一次;

sysdate+5/(24*60)

:表示隔

5分鐘執行一次;

sysdate+1:      

表示隔1

天執行一次;

trunc(sysdate+1)+2/24

:表示每天早上

2點執行一次;

在上面**中,我們把任務提交到

oracle

的定期任務佇列裡面之後馬上就

commit

了一下,這樣我們的定期任務就會處於執行狀態了。之後我們可以從

user_jobs

檢視裡面檢視定時任務的運**況了。

如果我們在建立的時候沒有進行

commit

操作,我們的定時任務是沒有執行的。這個時候就需要我們手動的來觸發定時任務的執行了。操作**是:

begin

dbms_job.run(jobnum);

end;

/

jobnum

就是我們之前建立定時任務時返回的那個

job的值。執行之後就表示我們需要執行哪個定時任務。

刪除定時任務的操作是:

begin

dbms_job.remove(jobnum);

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...