Oracle 編寫存儲過程並設置定時執行

  • 2019 年 10 月 21 日
  • 筆記

Oracle 版本:11g

PL/SQL 版本:11.0.3.1770

1.如果編寫單個存儲過程,則直接在procedure新建並編寫;如果需要寫多個同類功能的存儲過程,為了方便管理,可以現在package中定義,然後在package bodies 中編寫過程體,如下圖所示:

 

1.1 編寫單個procedure

1.1.1右鍵procedure,新建——填寫過程名和相關參數:

 1.1.2編寫過程,可以修改方法名和參數(該過程功能是列印輸入的參數):

1.1.3點擊F8提交存儲過程,沒有報錯的話會在procedure包下出現新增的p_test過程:

 

 

 1.1.4右鍵p_test——點擊test——輸入參數——點擊F9或者左上角(start debugger)

 

 

 1.1.5點擊run(或Ctrl + R)執行

 

 

 1.1.6切換到DBMS ouput 可以看到過程的執行結果:

 

 

1.2 設置定時任務執行存儲過程


1.2.1找到jobs包

 

 

 1.2.2右鍵新建一個定時任務,Name-給該定時任務命名;Type-選擇Store procedure(即執行的是一個存儲過程);Action-填寫編寫的存儲過程名稱;Start date-開始時間;Frequency-選擇執行頻率;Interval-間隔時間(為了方便看到效果,這裡設置了10秒執行一次);Job class-選擇default job class即可;下方填入存儲過程的參數,點擊Apply即可。

 

 

 

 

 

 1.2.3此時存儲過程就會每10秒自動執行了,點擊下圖選項可以看到執行詳情和日誌,點擊reflash刷新一下即可:

 

 

   以上就是一個完成的編寫存儲過程到定時執行的過程,如果編寫的存儲過程函數體是查詢某個表的數據然後插入另外的表的,就可以實現定時從遠程資料庫把數據插入到本地數據的功能,這也是存儲過程定時任務常用的場景。

 

 


 

 

1.3 多個同類型的存儲過程可以在package中定義,然後再package bodies 中實現:

1.3.1新建package,定義名稱和填寫包的用途:

 

1.3.2定義存儲過程,此處定義了一個無參的p_apple和一個有參的p_orange;

 

 

1.3.3按F8提交,package下多了一個PA_EATFOOD,同時package bodies下多了一個同名的PA_EATFOOD,在此編寫函數的詳細方法;

 

 

 暫時不需要寫的函數,可以用null設置為無功能的空方法,確認無誤後點擊F8執行即可。

1.3.4測試,點擊左方的函數,右鍵test,進入執行單個函數進行測試操作:

 

 

 1.3.5設置定時任務跟1.2過程一樣,唯一的區別是Action 選項要在過程名前面加上包名,本例中即PA_EATFOOD.p_apple和PA_EATFOOD.p_orange。