Oracle定時計劃快速使用

jopen 8年前發布 | 10K 次閱讀 Oracle數據庫 SQL Oracle 數據庫服務器

Oracle定時計劃快速使用

前言:

SQL Server中有相關的定時計劃,可以直接打開sql server 的任務管理器進行配置,可以方便、快速實現定時執行相應任務。相應的Oracle也有對應的定時計劃,只不過沒有一個很好的圖形界面供用戶去操作。本文主要是為了方便用戶在Oracle中快速創建定時計劃,定期執行相應的sql或者存儲過程。

1.   創建定時計劃

說明:以下所有的示例代碼,都需要用戶先連上sql/plus之后,在sql/plus中執行。

1.1      創建存儲過程

存儲過程不是必須的,只不過是把相關的一系列的sql語句整合在一塊,方便執行。

示例:

create or replace procedure update_black_gray_list as

begin

UPDATE SMS_BLACKLIST //要執行的sql語句

SET FLAG='0',"ENABLE"='2',

FDATE=TO_DATE(TO_DATE(TO_CHAR(SYSDATE, 'yyyy-mm-dd'), 'yyyy-mm-dd')),

TDATE=TO_DATE(TO_DATE(TO_CHAR(SYSDATE+7, 'yyyy-mm-dd'), 'yyyy-mm-dd'))

WHERE FLAG='0' AND "ENABLE"='0' AND

TDATE<TO_DATE(TO_DATE(TO_CHAR(SYSDATE, 'yyyy-mm-dd'), 'yyyy-mm-dd'));

end;

/

1.2      創建定時計劃

示例:

variable update_list_job number;

begin

dbms_job.submit(:update_list_job,'update_black_gray_list;',TRUNC(SYSDATE),'TRUNC(SYSDATE+1)');

end;

/

變量update_list_job是為了存儲創建生成的計劃的唯一標識號,方便刪除,查看該定時計劃的相關信息

1.2.1 dbms_job.submit() 說明

PROCEDURE submit (

job  OUT  binary_ineger,

what IN varchar2,

next_date  IN date,

interval IN varchar2,

no_parse IN booean:=FALSE)

這個過程有五個參數:job、what、next_date、interval與no_parse。

l job 參數是由 Submit() 過程返回的 binary_ineger 。這個值用來唯一標識 job

l what 參數是將被執行的 PL/SQL 代碼塊(一般多是存儲過程)。

l next_date 參數指識何時將運行這個工作。

l interval 參數何時這個工作將被重執行。

interval是指上一次執行結束到下一次開始執行的時間間隔, 當interval設置為null時,該job執行結束后,就被從隊列中刪除。假如我們需要該job周期性地執行,則要用‘sysdate+m’表示。

示例:

每天運行一次 'SYSDATE + 1'

每小時運行一次 'SYSDATE + 1/24'

每分鐘運行一次 'SYSDATE + 1/(60*24)'

每秒運行一次 'SYSDATE + 1/(60*24*60)'

每隔一星期運行一次 'SYSDATE + 7'

每天午夜12點 'TRUNC(SYSDATE + 1)'

每天早上1點30分 'TRUNC(SYSDATE + 1) + (1*60+30)/(24*60)'

每星期二中午12點 'NEXT_DAY(TRUNC(SYSDATE ), ''TUESDAY'' ) + 12/24'

每個月第一天的午夜12點 'TRUNC(LAST_DAY(SYSDATE ) + 1)' 

每個季度最后一天的晚上11點 'TRUNC(ADD_MONTHS(SYSDATE + 2/24, 3 ), 'Q' ) -1/24' 

每星期六和日早上6點10分 'TRUNC(LEAST(NEXT_DAY(SYSDATE, ''SATURDAY"), NEXT_DAY(SYSDATE, "SUNDAY"))) + (6×60+10)/(24×60)'

不再運行該任務并刪除它 NULL

l no_parse 參數指示此工作在提交時或執行時是否應進行語法分析(默認為 false ——TRUE 指示此 PL/SQL 代碼在它第一次執行時應進行語法分析,而 FALSE 指示本 PL/SQL 代碼應立即進行語法分析。

1.3      執行定時計劃

示例:

begin

dbms_job.run(:update_list_job);

end;

/

1.4      刪除定時計劃

示例:

begin

dbms_job.remove(:update_list_job);

end;

/

2.   查看所有定時計劃

select  *  from  user_jobs;

3.   刪除定時計劃

3.1 刪除所有定時計劃

begin

for v in(select job from user_jobs) loop

dbms_job.remove(v.job);

end loop;

commit;

end;

3.2 刪除指定內容的定時計劃

begin

for v in(select job from user_jobs where what in( 'the_what_name;' ) )

loop

dbms_job.remove(v.job);

end loop;

commit;

end;

/

3.3 刪除指定用戶的定時計劃

begin

for v in(select job from user_jobs where log_user='USERXXXX') loop

dbms_job.remove(v.job);

end loop;

commit;

end;

/

來自: http://www.cnblogs.com/Olive116/p/5140444.html

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!