在 oracle 中設置在指定時間段內定時執行的任務,需創建觸發器和作業:1. 使用觸發器指定執行時間段(開始和結束日期)和要執行的任務;2. 使用作業指定觸發器的名稱、開始執行日期和重復頻率。
如何在 Oracle 中設置在指定時間段內定時執行的任務
在 Oracle 數據庫中,可以使用 DBMS_JOB 包來創建和管理定時任務。要設置在某個時間段內定時執行的任務,請按照以下步驟操作:
1. 創建觸發器
使用以下語句創建一個觸發器,該觸發器將在指定的時間段內執行指定的 PL/SQL 塊:
<code class="sql">CREATE OR REPLACE TRIGGER trigger_name BEFORE/AFTER INSERT/UPDATE/DELETE ON table_name FOR EACH ROW BEGIN IF (SYSDATE BETWEEN start_date AND end_date) THEN -- 在此執行要執行的任務 END IF; END;</code>
登錄后復制
其中:
trigger_name
是觸發器的名稱。
start_date
是任務開始執行的日期和時間。
end_date
是任務結束執行的日期和時間。
2. 創建作業
使用以下語句創建一個作業,該作業將調用觸發器:
<code class="sql">BEGIN DBMS_JOB.SUBMIT( job => job_name, next_date => start_date, interval => 'freq=(seconds=60, minutes=0, hours=0, days=0, weeks=0, months=0, years=0)', what => 'BEGIN ' || trigger_name || '; END;' ); END;</code>
登錄后復制
其中:
job_name
是作業的名稱。
start_date
是作業開始執行的日期和時間。
interval
指定作業執行的頻率,在本例中,每 60 秒執行一次。
what
指定要執行的 PL/SQL 塊。
示例
要創建一個在每天上午 9 點到下午 5 點之間每小時執行一次的任務,可以使用以下代碼:
<code class="sql">CREATE OR REPLACE TRIGGER my_trigger BEFORE INSERT/UPDATE/DELETE ON my_table FOR EACH ROW BEGIN IF (SYSDATE BETWEEN TO_DATE('2023-03-08 09:00:00', 'YYYY-MM-DD HH24:MI:SS') AND TO_DATE('2023-03-08 17:00:00', 'YYYY-MM-DD HH24:MI:SS')) THEN -- 在此執行要執行的任務 END IF; END; BEGIN DBMS_JOB.SUBMIT( job => my_job, next_date => TO_DATE('2023-03-08 09:00:00', 'YYYY-MM-DD HH24:MI:SS'), interval => 'freq=(seconds=0, minutes=60, hours=0, days=0, weeks=0, months=0, years=0)', what => 'BEGIN my_trigger; END;' ); END;</code>
登錄后復制