Oracle SQL Developer定製天天執行一次存儲過程的計劃任務

    有個需求,就是天天從一個表中提取出特定數據,保存到另外一個表中。才疏學淺,最初想用Oracle的觸發器能夠實現,翻開課本以後才發現觸發器不是用來幹這個的。因而用Java的Quartz框架編寫代碼實現了這個需求。完成以後又想用數據庫實現,翻了下課本,找了些教程,發現網上都是用PL/SQL DEV工具編寫腳本實現的。個人電腦上只有Oracle SQL Developer工具,通過一陣折騰,最終也實現了。數據庫

    我的感受用SQL Developer的圖形化工具能夠很方便的實現建立存儲過程,定時做業的任務。相比較於PL/SQL,這個的學習成本更低一些,不須要知道那麼多的腳本命令。app

    記錄下步驟。框架

1.獲取昨天一天的全部數據工具

select     pk_information,problemno,problemname,productid,partno,createUser,createTime,dutygroup,dutyuser,batch,problemtype,emergencydegree from         brsj_kms_problem 
where       createtime 
between    to_char(sysdate-1,'yyyy-mm-dd') 
and           to_char(sysdate,'yyyy-mm-dd');

2.將查詢到的數據插入到對應的表中學習

insert into brsj_kms_distributeproblem (
             pk_information
             ,problemno
             ,problemname
             ,productid
             ,partno
             ,createUser 
             ,createTime
             ,dutygroup
             ,dutyuser
             ,batch
             ,problemtype
             ,emergencydegree
        )
    select pk_information,problemno,problemname,productid,partno,createUser,createTime,dutygroup,dutyuser,batch,problemtype,emergencydegree from 
    brsj_kms_problem where createtime between to_char(sysdate-1,'yyyy-mm-dd') and to_char(sysdate,'yyyy-mm-dd');

這裏特別說明一下,第一個括號後面沒有values關鍵字,加上values關鍵字執行就會報錯,錯誤的表達式。測試

3.測試上面的SQL語句無誤後,開始建立存儲過程spa

create procedure ScheduledTasks
is
begin
insert into brsj_kms_distributeproblem (
             pk_information
             ,problemno
             ,problemname
             ,productid
             ,partno
             ,createUser 
             ,createTime
             ,dutygroup
             ,dutyuser
             ,batch
             ,problemtype
             ,emergencydegree
        )
    select pk_information,problemno,problemname,productid,partno,createUser,createTime,dutygroup,dutyuser,batch,problemtype,emergencydegree from 
    brsj_kms_problem where createtime between to_char(sysdate-1,'yyyy-mm-dd') and to_char(sysdate,'yyyy-mm-dd');
    COMMIT;
EXCEPTION
   WHEN OTHERS THEN
     DBMS_OUTPUT.PUT_LINE('Exception happened,data was rollback');
     ROLLBACK;
END;

    建立好了以後,刷新一下,在左側的過程文件夾中就能夠看到對應的過程名稱,檢查圖標上是否有紅叉,若是有,說明語句錯誤,從新檢查哪裏出錯。若是沒有錯誤,直接右擊,選擇運行,運行成功後,能夠查看對應的表中是否成功插入了數據,須要注意的是要確保執行過程的SQL語句邏輯上是能產生數據的,例如查詢昨日的全部記錄,若是昨日沒有數據產生,即使SQL語句無誤也不會產生結果,因此須要提早添加一些測試數據,確保能看到結果。code

     運行到這裏,能看到新產生的數據,說明建立的過程是沒有問題的,接下來就是如何天天讓它運行一次的問題了。orm

4.定時執行存儲過程blog

     打開項目列表-->調度程序-->做業,右擊新建做業。

 

打開編輯做業窗口後,就能夠在這裏設定參數了。

做業名隨便起一個,已啓用能夠先不打勾,建立好後選擇啓用也能夠的。

說明裏能夠加漢字作一些介紹。

做業類用默認的。

做業類型裏面選擇存儲過程,方案選擇默認,打開過程下拉框,就能夠看到咱們以前建立好的存儲過程,把它選上。

右邊什麼時候執行做業就是選擇頻率了,能夠根據本身的需求選擇執行一次仍是天天執行,重複時間間隔裏面能夠詳細選擇每一年、每個月、天天、每時等詳細參數。選好以後會自動生成代碼。

開始時間和結束時間也能夠按本身的需求進行選擇。

選好以後點擊應用,做業就建立好了,若是剛纔選擇了已啓用,這時候做業已經開始運行了。若是剛纔沒選啓用,在建立好的做業上右擊,選擇啓用,也會開始運行。

設置一個合理的運行頻率和運行時間進行測試是否運行正確,無誤以後再修改頻率和時間爲真正運行的頻率和時間。至此,全部過程所有完成了。

 

網上用的都是PL/SQL裏面建立Job,須要寫一大堆命令,這個比較簡單,圖形化工具建立定時任務,不容易出錯。我的感受Oracle的這個SQL Developer工具仍是很強大的,功能很豐富,不少東西均可以用圖形界面建立出來。

相關文章
相關標籤/搜索