oracle定時任務報“並非所有變量都已經綁定”以及創建,刪除等

-- 查詢該存儲過程的定時任務
select job, next_date, next_sec, failures,what, broken from dba_jobs where what like '%PRO_BD_MO_DEG_EVAL%'; 
var job number;
begin
  sys.dbms_job.submit(job => :job,
      what => 'PRO_BD_MO_DEG_EVAL;',
      next_date => TRUNC(SYSDATE),   --初次執行
      interval => 'TRUNC(LAST_DAY(SYSDATE))+5+1/24');     
 commit;
end;

上述定時任務執行後會報錯:“並非所有變量都已經綁定”

需要將:job中的:刪除,將var 修改成declary,如下:

declare job number;
begin
  sys.dbms_job.submit(job => job,
      what => 'PRO_BD_MO_DEG_EVAL;',
      next_date => TRUNC(SYSDATE),   --初次執行
      interval => 'TRUNC(LAST_DAY(SYSDATE))+5+1/24');     
 commit;
end;

1.手動調用job

begin
   DBMS_JOB.RUN(40); /*40 job的id*/
 end;

2.停止 job

begin   
  dbms_job.broken(jobId,true,next_date);        /*停止一個job,jobId, job的ID,裏面參數true也可是false,next_date(某一時刻停止)也可是sysdate(立刻停止)。   */
commit;
end;

3.刪除 job

begin
  dbms_job.remove(83);  /*刪除自動執行的job,參數是 job的id*/
  commit;
end;   

4.修改 job 的間隔時間

begin
  dbms_job.interval(job,interval);  /*job  job的ID,interval: 計算下一次任務執行的時間表達式*/
  commit;
end;

5.修改下一次執行時間

begin
   dbms_job.next_date(job,next_date); /*job: job 的ID;nex_date:要修改後的計算下一次執行的時間表達式*/
   commit;
end;  

其他知識點:

dba_jobs 表中字段含義:

JOB 任務的唯一標識碼

LOG_USER 提交任務的用戶

PRIV_USER 賦予任務權限的用戶

SCHEMA_USER 對用戶作語法分析的用戶模式

LAST_DATE 最後一次成功執行任務的時間

LAST_SEC 最後一次成功執行任務的時間的時分秒

THIS_DATE 正在執行的任務的開始時間,若沒有則爲空

THIS_SEC 正在執行的任務的開始時間的時分秒,若沒有則爲空

NEXT_DATE 下一次執行定時任務的時間

NEXT_SEC 下一次執行定時任務的時間的時分秒

TOTAL_TIME 執行當前任務所需要的時間,單位:秒

BROKEN 標誌參數,Y表示任務中斷,以後不會再運行

INTERTAL 計算下一次執行定時任務的時間表達式

FAILURES 當前定時任務執行失敗的總次數

WHAT 執行任務的PL/SQL代碼塊

NLS_ENV 任務執行的NLS會話設置

MISC_ENV 定時任務運行的其他一些參數設置

INSTANCE 標識當前任務運行是否受限,0 沒有受限

INTERVAL 部分參數值示例:

每天午夜12點: ‘TRUNC(SYSDATE + 1)’
每天早上8點30分: ‘TRUNC(SYSDATE + 1) + (860+30)/(2460)’
每星期二中午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)’
每月25號00:00執行: ‘TRUNC(LAST_DAY(SYSDATE ) + 25)’
--------------------------
1:每分鐘執行
Interval => TRUNC(sysdate,‘mi’) + 1/ (24*60)

Interval => sysdate+1/1440

2:每天定時執行
例如:每天的凌晨1點執行
Interval => TRUNC(sysdate) + 1 +1/ (24)

3:每週定時執行
例如:每週一凌晨1點執行
Interval => TRUNC(next_day(sysdate,‘星期一’))+1/24

4:每月定時執行
例如:每月1日凌晨1點執行
Interval =>TRUNC(LAST_DAY(SYSDATE))+1+1/24

5:每季度定時執行
例如每季度的第一天凌晨1點執行
Interval => TRUNC(ADD_MONTHS(SYSDATE,3),‘Q’) + 1/24

6:每半年定時執行
例如:每年7月1日和1月1日凌晨1點
Interval => ADD_MONTHS(trunc(sysdate,‘yyyy’),6)+1/24

7:每年定時執行
例如:每年1月1日凌晨1點執行
Interval =>ADD_MONTHS(trunc(sysdate,‘yyyy’),12)+1/24

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章