AI智能
改变未来

Oracle個人使用手冊


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;

 

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Oracle個人使用手冊