首頁 > 資料庫 > Oracle > 主體

oracle定時儲存程序

WBOY
發布: 2023-05-07 22:33:38
原創
2976 人瀏覽過

Oracle是一款非常受歡迎的關係型資料庫。在業務中,我們經常需要定期執行一些儲存過程,來完成一些自動化的操作,節省操作成本。本文將介紹如何使用Oracle來定時執行預存程序。

一、Oracle定時執行預存程序的基本概念
Oracle中的定時執行預存程序是指一定時間間隔內,系統自動執行預先編寫好的一些預存程序。這種方式常用於定期資料歸檔、備份、清理等任務。

二、Oracle定時執行預存程序的實作方法
Oracle定時執行預存程序可以透過Oracle的調度程序來實現。使用排程器可以輕鬆地在指定的時間點或時間間隔內啟動作業,並在時間到時結束。

  1. 建立作業
    在Oracle中可以分別透過PL/SQL、PL/SQL Developer、Toad等工具來建立一個作業。
    例如建立一個叫做「myjob」的作業,包含執行預存程序「mystoredprocedure」:

begin
dbms_scheduler.create_job
(job_name=>'myjob',
job_type=>'STORED_PROCEDURE',
job_action=>'mystoredprocedure');
end;

  1. 定時執行
    建立了作業之後,還需要在什麼時間執行這個作業? Oracle調度程式可以透過以下兩種方式來控製作業的執行時間:

(1)基於時間的執行
在Oracle中,可以使用dbms_scheduler套件建立時間表:

BEGIN
DBMS_SCHEDULER.CREATE_SCHEDULE (

      schedule_name          => 'weekends',  
      start_date             => SYSTIMESTAMP,  
      repeat_interval        => 'FREQ=WEEKLY;BYDAY=SAT,SUN;BYHOUR=0;BYMINUTE=0',  
      end_date               => NULL,  
      comments               => 'Weekend schedule - Saturday and Sunday every week at midnight.'  
登入後複製

);
END;

該程式碼段可以建立一個在週末每天零點執行的時間表。當然,可以根據具體的業務需求建立不同的時間表。

為了讓myjob這個作業在以下時間執行,需要將時間表weekends邏輯應用在myjob上:

BEGIN
DBMS_SCHEDULER.SET_ATTRIBUTE

(  
  name                      => 'myjob',  
  attribute                 => 'repeat_interval',  
  value                     => 'weekends'  
);  
登入後複製

;

使用這種基於時間的排程方式,作業的執行週期會非常固定,由開發者根據業務需求進行設定。

(2)基於事件的執行
另一種實現定時執行預存程序的方法是基於事件驅動的,例如某個資料表的一個欄位發生了變換,這時候需要驅動預存程序的執行。在Oracle中,可以透過以下程式碼來建立一個基於事件的定時調度:

BEGIN
DBMS_SCHEDULER.CREATE_JOB

(  
  job_name             => 'job_name',  
  job_type             => 'PLSQL_BLOCK',  
  job_action           => 'BEGIN my_procedure(:my_param); END;',  
  start_date           => SYSTIMESTAMP,  
  event_condition      => 'tab.col3 = ''Y''',  --这里可以选择需要监控的事件类型和字段  
  queue_spec           => 'queue_specification',  
  auto_drop            => FALSE,  
  enabled              => TRUE  
);  
登入後複製

#END;

  1. #執行儲存流程
    在上述範例中,「myjob」作業的作用是執行預存程序「mystoredprocedure」。在這裡我們可以看到調度程序本身並不會運行預存過程,它只負責管理作業的執行。

要成功定時執行預存程序,必須建立一個預存程序,並將其與作業關聯。這裡我建立一個名為「mystoredprocedure」的預存程序作為範例:

CREATE OR REPLACE PROCEDURE "mystoredprocedure"
IS
BEGIN

INSERT INTO employees_audit  
  (employee_id,  
   salary,  
   entry_date)  
SELECT employee_id,  
       salary,  
       SYSDATE  
  FROM employees
  WHERE hire_date > SYSDATE - 1;  
       
登入後複製

END mystoredprocedure;

BEGIN

rrreee

END mystoredprocedure;

這個例子是簡單地將新增資料資訊儲存在資料庫的employees_audit表中,開發者可以根據特定需求來編寫自己的預存程序。


定時執行預存程序的程式運行在背景。根據開發者設定的時間排程策略,作業會在指定的時間啟動,然後執行myst​​oredprocedure預存程序。

###三、總結###Oracle定時執行預存程序是一種高效的處理定期任務的方案,使用Oracle的調度程序可以非常方便地實現這個過程。透過本文所介紹的實作方式,開發者可以靈活地配置作業的運行時間、頻率和需要執行的預存程序。這可以大幅縮短業務處理時間,並提高處理效率。 ###

以上是oracle定時儲存程序的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!