集成開發(fā)環(huán)境PL/SQL Developer教程:如何在Oracle中創(chuàng)建定時任務(wù)
PL/SQL Developer是一個集成開發(fā)環(huán)境,它專門針對Oracle數(shù)據(jù)庫的存儲程序單元的開發(fā)所用?,F(xiàn)在越來越多的商業(yè)邏輯和應(yīng)用程式邏輯都在使用Oracle服務(wù)器,所以PL/SQL編程在整個開發(fā)過程中也變得越來越重要。PL/SQL開發(fā)者在開發(fā)Oracle應(yīng)用程序的時候都注重于開發(fā)工具簡單易用,代碼簡潔和開發(fā)效率高等特點。
PL/SQL Developer具有強(qiáng)大的PL/SQL編輯器、集成調(diào)試器、PL/SQL美化、SQL窗口、命令窗口等窗口,讓你的數(shù)據(jù)庫開發(fā)簡單、高效!
相信很多人在使用PL/SQL Developer會遇到一些困難,這時候就需要上網(wǎng)查找資料來解決了,就好比如何在Oracle中創(chuàng)建定時任務(wù),應(yīng)該不少人都有這樣的問題吧,現(xiàn)在就來看看應(yīng)該怎么解決吧~
最近由于需要對數(shù)據(jù)庫的一個表進(jìn)行定時更新,之前并沒有接觸過PL/SQL和Oracle的定時任務(wù)Job,只是在Java Web項目中寫過一些dao層的一些增刪改查SQL語句。為了實現(xiàn)這一需求,于是在網(wǎng)上找了各種資料,最后發(fā)現(xiàn)PL/SQL developer 在DBMS_JOB的創(chuàng)建定時任務(wù)job時提供了許多方便,本人使用的是PL/SQL Developer Version 8.0.4.1514 。
Oracle數(shù)據(jù)庫在Oracle 10G新增了DBMS_SCHEDULER的功能,比較之前使用的DBMS_JOB,其功能更強(qiáng)也更安全,但是細(xì)節(jié)問題太多,對于我這個新手來說看著有點頭大。于是選擇了DBMS_JOB。
創(chuàng)建定時任務(wù)job之前首先需要有我們要操作的數(shù)據(jù)庫表,然后我們應(yīng)該先建立存儲過程,在PL/SQL Developer中,我們新打開一個Program Window,如圖1所示。
圖1 新打開一個 Program Window
存儲過程的代碼編寫這里就略過,有什么不懂的就谷歌吧,一定能解決你的問題的!編寫完成后,選擇執(zhí)行按鈕,存儲過程一般編譯通過的話是會提示compiled successfully的,如果有問題的話PL/SQL是會直接提示錯誤信息的,你按照提示進(jìn)行修改就行。這里需要說明的是,存儲過程成功編譯通過,創(chuàng)建好job后,執(zhí)行job卻始終執(zhí)行錯誤,提示執(zhí)行失敗,這是你也得回頭看看很可能是你的存儲過程有運(yùn)行錯誤(這里我也不知道怎么稱呼,較java里面的說法,暫時這樣稱呼吧)。像我這次就碰到這種情況,弄得我好生郁悶。這里推薦你自己先test一下自己編寫的存儲過程,是不是存在運(yùn)行問題。執(zhí)行test操作可以這樣:在procedures目錄下,找到那個你剛剛創(chuàng)建好的存儲過程,單擊右鍵選擇”test“,這時會彈出”test window“,選擇執(zhí)行按鈕,這樣就可以避免因為存儲過程造成的job不能運(yùn)行的錯誤了。
創(chuàng)建好正確的存儲過程后,我們要建立一個job。選擇DBMS_Jobs目錄,并單擊右鍵,選擇 New,這是便會彈出一個job創(chuàng)建對話框,如圖2所示。
圖2 dbms_job創(chuàng)建對話框
由上圖可以知道,其中what,Next date,Interval是需要我們填寫的,Borken一般不要勾選,下面詳細(xì)說下這三項的寫法:
1、what
what項是填寫執(zhí)行的任務(wù)的名稱及其輸入?yún)?shù)。這里由于沒有涉及到輸入?yún)?shù),所以我只寫了存儲過程名,需要注意的是格式必須是:存儲過程名;。例如我新建的存儲過程叫proc_test,那么what項就應(yīng)該寫成這樣 “proc_test;”,雙引號只是格式需要,請無視。(注意分號千萬不能忘了寫了,當(dāng)然你忘了系統(tǒng)會提示你job創(chuàng)建錯誤的,嘿嘿)
2、Next date
Next date項是填寫job下次的執(zhí)行時間,一般我們不立即執(zhí)行的話,那么這個就是job第一次執(zhí)行的時間了。具體格式的話可以參考網(wǎng)上的,很詳細(xì)。這里我說下我常用的格式吧。(貌似也可以不填,那么Apply之后會變成當(dāng)前系統(tǒng)時間,然后可以選中job號單擊右鍵run立即執(zhí)行。)
為了說明清楚,首先需要知道sysdate是oracle數(shù)據(jù)庫的系統(tǒng)時間,可以使用 select sysdate from dual來查看當(dāng)前系統(tǒng)時間。在oracle中sysdate+1表示當(dāng)前的時間加一天,也就是明天這個時候,其中的1表示1天,那么一個小時就可以表示為1/24,一分鐘1/1440。如果我想要在當(dāng)前的時間的兩小時后執(zhí)行那么就可以填為sysdate+1/12。如果想要獲得整點時間建議使用trunc()函數(shù),trunc(sysdate)是表示當(dāng)前日期的零點,比如說我要讓它在今天晚上的9點開始執(zhí)行的話,可以這樣寫trunc(sysdate)+21/24。具體的時間可以根據(jù)自己的需求來寫。當(dāng)然還可以使用to_date()的寫法,這里不說了,個人覺得沒必要拼字符串,麻煩。
3、Interval
Interval項表示job任務(wù)執(zhí)行的時間間隔,可以不填。如果每填的話默認(rèn)值為null,這樣job就執(zhí)行一次就停止了。如果我們需要定時執(zhí)行任務(wù),那這項就必填不可了。格式其實和Next date一樣,這里舉個例子,如果我需要該任務(wù)每天凌晨兩點執(zhí)行的話,可以這樣寫:trunc(sysdate)+1+1/12。其他的可以以此類推,就不再說明了。
確認(rèn)填寫完成后,單擊”Apply",如果填寫無誤的話,就生成了一個job,在dbms_job目錄下可以看到,剛創(chuàng)建好的job編號是有雙引號的。填寫有錯的話就好好檢查下哪里出了問題。另外需要說明的是,如果你需要立即執(zhí)行的話,可以選中job,單擊右鍵,選擇"run“,任務(wù)便會立即執(zhí)行。
以上是我在最近用PL/SQL Developer 創(chuàng)建定時任務(wù)時學(xué)習(xí)到的一些小知識,有什么理解的不對的地方,還請多多指教。
附錄一些常用的job查看sql語句:
select * from dba_jobs; //查看所有用戶的job
select * from dba_jobs_running; //查看當(dāng)前正在運(yùn)行的job
select * from user_jobs; //查看當(dāng)前用戶的job
本文內(nèi)容就是這樣了,希望對您有所幫助哦~想要了解更多產(chǎn)品的資訊可以繼續(xù)關(guān)注我們哦~您也可以下載PL/SQL Developer免費(fèi)版評估一下~
相關(guān)內(nèi)容推薦:
想要購買PL/SQL Developer正版授權(quán),或了解更多產(chǎn)品信息請點擊“咨詢在線客服”