Oracle個人使用手冊:
DBMS_JOB包
Broken()過程
作用:更新一個已提交的工作的狀態
[code]procedure broken(job in binary_integer,broken in boolean, next_date in date :=sysdate);
job指的是工作號
broken指的是此工作是否被標記為開關
next_date指的是下一次執行時間,參數缺省值為當前日期和時間
用法舉例
[code]--1.將開的job更改為關閉的狀態begindbms_job.broken(1,true);commit;end;--2.將關的job更改為開始的狀態,job執行時間為當下時間begindbms_job.broken(1,false);commit;end;--3.將關的job更改為開始的狀態,job執行時間為指定時間begindbms_job.broken(1,false,to_date(\'2019-01-11 17:09:00\',\'yyyy-mm-dd hh24.mi.ss\'));commit;end;
Change()過程
作用:用来改变指定工作的设置 ,包括工作執行內容,下一次執行時間,執行時間間隔
[code]procedure change(job in binary_integer,what in varchar2,next_date in date,interval in varchar2);
job指的是工作號
what指的job運行的代碼
next_date是下一次執行時間
interval是工作執行頻率
用法舉例
[code]--1.改變一個已安排的工作號的工作執行內容,下一次執行時間及執行間隔begindbms_job.Change(1,\'DECLARE IN_S_MFGDATE VARCHAR2(200);BEGIN IN_S_MFGDATE := NULL; SP_TEST ( 0, IN_S_MFGDATE ); COMMIT;END; \',\'2019-02-01 07:30:00\',\'TRUNC(SYSDATE+2)\');commit;end;
Interval()過程
作用:用來設置工作的執行頻率
[code]procedure Interval(job in binary_integer,interval in varchar2);
job指的是工作號
interval是工作的執行頻率
用法舉例
[code]--1.改變一個已安排的工作號的執行間隔,注意字符串中有\' 需要用\'\'來表示\'begindbms_job.interval(1,\'TRUNC(SYSDATE+10/1440,\'\'MI\'\')\');commit;end;
執行頻率的一般用法
1.每隔五分鐘執行
[code]interval=>\'TRUNC(SYSDATE,\'\'MI\'\')+5/1440\'
2.每個小時9分鐘,24分鐘,39分鐘,54分鐘執行
[code]interval=>\'TO_DATE(TO_CHAR(SYSDATE+1/96,\'\'YYYYMMDDHH24\'\') || (TRUNC(TO_CHAR(SYSDATE+1/96,\'\'MI\'\')/15)*15)+9 ,\'\'YYYYMMDDHH24MI\'\')\'
3.每天7點35分執行
[code]interval=>\'TRUNC(SYSDATE+1)+7/24+35/1440\'
4.每週星期二的上午8點執行
[code]interval=>\'NEXT_DAY(TRUNC(SYSDATE),\'\'TUSEDAY\'\')+8/24\'
5.每月的二號的上午7點35執行
[code]interval=>\'ADD_MONTHS(TRUNC(SYSDATE,\'\'MM\'\'),1)+1+7/24+35/1440\'
ISubmit()過程
作用:用特定的工作號提交一個工作
[code]procedure ISubmit(job in binary_integer,what in varchar2,next_date in date,interval in varchar2,no_parse in boolean :=false);
job指的是要指定的未存在的工作號
what指的是工作執行內容
next_date指的是下一次工作執行時間
interval指的是工作執行時間間隔
no_parse指的是該工作號在提交或執行時是否進行語法分析 true指第一次執行時進行語法分析,false指立即進行語法分析
用法舉例
[code]--1.新建一個JOB號為2的工作begindbms_job.Isubmit(2,\'DECLARE IN_S_MFGDATE VARCHAR2(200);BEGIN IN_S_MFGDATE := NULL;SP_TEST( IN_S_MFGDATE ); COMMIT;END; \',\'2019-02-01 07:30:00\',\'TRUNC(SYSDATE+2)\');commit;end;
Next_Date()過程
作用:用來設定一個工作的下一次執行時間
[code]procedure Next_Date(job in binary_integer,next_date in date);
job指的是工作號
next_date指的是下一次被執行的日期和時間
用法舉例
[code]--改變一個已安排的工作的下一次執行時間begindbms_job.Next_Date(1,\'2019-02-01 07:30:00\');commit;end;
Remove()過程
作用:用來刪除一個已計劃運行的工作
[code]procedure Remove(job in binary_integer)
job指的是工作號
用法舉例
[code]--1.刪除一個已安排的工作begindbms_job.Remove(2);commit;end;
Run()過程
作用:立即執行一個指定的工作
[code]procedure Run(job in binary_integer)
job指的是工作號用法舉例
[code]--1.立即將1裡面的內容執行一遍,即使是broken的jobbegindbms_job.Run(1);end;
Submit()過程
作用:用系統指定的工作號提交一個工作
[code]procedure Submit(job out binary_integer,what in varchar2,next_date in date,interval in varchar2,no_parse in boolean:=false)
job指的是工作號
what指的是工作號執行內容
next_date指的是下一次工作號執行時間
interval指的是工作執行頻率
no_parse指的是該工作號在提交或執行時是否進行語法分析 true指第一次執行時進行語法分析,false指立即進行語法分析
用法舉例
[code]--1.新建一個工作號由系統指定的工作DECLAREX NUMBER;BEGIN BEGIN SYS.DBMS_JOB.SUBMIT ( job => X ,what => \'DECLARE IN_S_MFGDATE VARCHAR2(200);BEGIN IN_S_MFGDATE := NULL;G( 0,0); COMMIT;END; \',NEXT_DATE=>\'2019-02-01 07:30:00\',INTERVAL=>\'TRUNC(SYSDATE+2)\' ,no_parse => FALSE ); END; COMMIT;END;/
User_Export()過程
作用:導出指定工作的語法
[code]procedure User_Export(job in binary_integer,content in out varchar2)
job指的是已安排的工作號
content指的是該工作號要重新提交時用的語法
用法舉例
[code]--1.在需要JOB語法的時候將工作的語法導出,輸出部分即為語法declaresqlstring varchar2(2000);begindbms_job.user_export(2,sqlstring);dbms_output.put_line(sqlstring);end;
What()過程
作用:在工作執行時,重新設置指定工作號的內容
[code]procedure What(job in binary_integer, what in out varchar2)
job指的是已安排的工作號
what指的是重新設置該工作號要執行的內容
用法舉例
[code]--1.將一個已安排的工作號的工作內容替換begindbms_job.what(2, \'DECLARE IN_S_MFGDATE VARCHAR2(200);BEGIN IN_S_MFGDATE := NULL;G( 0,0); COMMIT;END; \');commit;end;
導出當前用戶下的JOB腳本語法
[code]declareuser_name varchar2(30);sqlstring varchar2(4000);cursor jobs is select * from user_jobs;beginselect user into user_name from dual;dbms_output.put_line(\'execute immediate \'\'alter session set current_schema =\'\'\'|| :要插入的AP賬號||\'\'\';\');dbms_output.put_line(\'\');for i in jobs loopdbms_job.user_export(i.job,sqlstring);dbms_output.put_line(sqlstring);dbms_output.put_line(\'\');sqlstring:=\'\';end loop;dbms_output.put_line(\'execute immediate \'\'alter session set current_schema =\'\'\'|| user_name||\'\'\';\');commit;end;
關閉當下用戶的未在運行的JOB腳本語法
[code]DECLARE CURSOR jobs IS SELECT * FROM user_jobs;BEGIN FOR i IN jobs LOOP IF i.broken = \'N\' THEN IF i.this_date IS NULL THEN dbms_job.broken(i.job, true); ELSE dbms_output.put_line(\'JOB:\' || i.job || \' 執行時間:\' || i.this_date); END IF; END IF; END LOOP;END;
開啟當下用戶的關閉的JOB腳本語法
[code]DECLARE CURSOR jobs IS SELECT * FROM user_jobs;BEGIN FOR i IN jobs LOOP IF ( i.broken = \'Y\' ) THEN dbms_job.broken(i.job, false); END IF; END LOOP; commit;END;