Oracle個人使用手冊

Oracle個人使用手冊:

 

DBMS_JOB包

Broken()過程

作用:更新一個已提交的工作的狀態

procedure broken(job in binary_integer,broken in boolean, next_date in date :=sysdate);
job指的是工作號
broken指的是此工作是否被標記為開關
next_date指的是下一次執行時間,參數缺省值為當前日期和時間

用法舉例

--1.將開的job更改為關閉的狀態
begin
dbms_job.broken(1,true);
commit;
end;
--2.將關的job更改為開始的狀態,job執行時間為當下時間
begin
dbms_job.broken(1,false);
commit;
end;
--3.將關的job更改為開始的狀態,job執行時間為指定時間
begin
dbms_job.broken(1,false,to_date('2019-01-11 17:09:00','yyyy-mm-dd hh24.mi.ss'));
commit;
end;

Change()過程

作用:用来改变指定工作的设置 ,包括工作執行內容,下一次執行時間,執行時間間隔

procedure change(job in binary_integer,what in varchar2,next_date in date,interval in varchar2);
job指的是工作號
what指的job運行的代碼
next_date是下一次執行時間
interval是工作執行頻率
​用法舉例
--1.改變一個已安排的工作號的工作執行內容,下一次執行時間及執行間隔
begin
dbms_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()過程

作用:用來設置工作的執行頻率

procedure Interval(job in binary_integer,interval in varchar2);
job指的是工作號
interval是工作的執行頻率
​用法舉例
--1.改變一個已安排的工作號的執行間隔,注意字符串中有' 需要用''來表示'
begin
dbms_job.interval(1,'TRUNC(SYSDATE+10/1440,''MI'')');
commit;
end;

執行頻率的一般用法

1.每隔五分鐘執行

interval=>'TRUNC(SYSDATE,''MI'')+5/1440'

2.每個小時9分鐘,24分鐘,39分鐘,54分鐘執行

interval=>'TO_DATE(TO_CHAR(SYSDATE+1/96,''YYYYMMDDHH24'') || (TRUNC(TO_CHAR(SYSDATE+1/96,''MI'')/15)*15)+9 ,''YYYYMMDDHH24MI'')'

3.每天7點35分執行

interval=>'TRUNC(SYSDATE+1)+7/24+35/1440'

4.每週星期二的上午8點執行

interval=>'NEXT_DAY(TRUNC(SYSDATE),''TUSEDAY'')+8/24'

5.每月的二號的上午7點35執行

interval=>'ADD_MONTHS(TRUNC(SYSDATE,''MM''),1)+1+7/24+35/1440'

 

ISubmit()過程

作用:用特定的工作號提交一個工作

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指立即進行語法分析
用法舉例
--1.新建一個JOB號為2的工作
begin
dbms_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()過程

作用:用來設定一個工作的下一次執行時間


procedure Next_Date(job in binary_integer,next_date in date);
job指的是工作號
next_date指的是下一次被執行的日期和時間
​用法舉例
--改變一個已安排的工作的下一次執行時間
begin
dbms_job.Next_Date(1,'2019-02-01 07:30:00');
commit;
end;

Remove()過程

作用:用來刪除一個已計劃運行的工作


procedure Remove(job in binary_integer)
job指的是工作號​
用法舉例
--1.刪除一個已安排的工作
begin
dbms_job.Remove(2);
commit;
end;

Run()過程

作用:立即執行一個指定的工作


procedure Run(job in binary_integer)
job指的是工作號​用法舉例

--1.立即將1裡面的內容執行一遍,即使是broken的job
begin
dbms_job.Run(1);
end;

 

Submit()過程

作用:用系統指定的工作號提交一個工作

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指立即進行語法分析
​用法舉例
--1.新建一個工作號由系統指定的工作
DECLARE
  X 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()過程

作用:導出指定工作的語法

procedure User_Export(job in binary_integer,content in out varchar2)
job指的是已安排的工作號
content指的是該工作號要重新提交時用的語法
​用法舉例

--1.在需要JOB語法的時候將工作的語法導出,輸出部分即為語法
declare
sqlstring varchar2(2000);
begin
dbms_job.user_export(2,sqlstring);
dbms_output.put_line(sqlstring);
end;

 

What()過程

作用:在工作執行時,重新設置指定工作號的內容


procedure What(job in binary_integer, what in out varchar2)
job指的是已安排的工作號
what指的是重新設置該工作號要執行的內容
​用法舉例
--1.將一個已安排的工作號的工作內容替換
begin
dbms_job.what(2, '
DECLARE
  IN_S_MFGDATE VARCHAR2(200);
BEGIN
  IN_S_MFGDATE := NULL;
 G( 0,0);
  COMMIT;
END; ');
commit;
end;

 

導出當前用戶下的JOB腳本語法


declare
user_name varchar2(30);
sqlstring varchar2(4000);
cursor jobs is select * from user_jobs;
begin
select 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 loop
dbms_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腳本語法


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腳本語法


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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值