begin
dbms_scheduler.create_job (
job_name => '測試',
job_type => 'PLSQL_BLOCK',
job_action => 'insert into job_test values(sysdate);',
start_date => sysdate,
end_date => TO_DATE(NULL),
repeat_interval => 'FREQ=MINUTELY; INTERVAL=1',
enabled => true,
comments => '定時執行計划任務'
);
end;
參數含義如下:
•JOB_NAME :指定任務的名稱,必選值,注意要確保指定的名稱唯一。
•JOB_TYPE :任務執行的操作類型,必選值,有下列幾個可選值:
◦PLSQL_BLOCK :表示任務執行的是一個PL/SQL匿名塊。
◦STORED_PROCEDURE :表示任務執行的是ORACLE過程(含PL/SQL PROCEDURE和JAVA PROCEDURE)。
◦EXECUTABLE :表示任務執行的是一個外部程序,比如說操作系統命令。
◦CHAIN :表示任務執行的是一個CHAIN。
•JOB_ACTION :任務執行的操作,必選值,應與JOB_TYPE類型中指定的參數相匹配。比如說對於PL/SQL匿名塊 此處就可以放置PL/SQL塊的具體代表,類似DECLARE .. BEGIN ..END這類;如果是ORACLE過程,那么此處 應該指定具體的過程名,注意由於任務執行,即使過程中有OUT之類參數,實際執行時也不會有輸出的。
•START_DATE :指定任務初次執行的時間,本參數可為空,當為空時,表示任務立刻執行,效果等同於指定該參 數值為SYSDATE。
•REPEAT_INTERVAL :指定任務執行的頻率,比如多長時間會被觸發再次執行。本參數也可以為空,如果為空的 話,就表示當前設定的任務只執行一次。REPEAT_INTERVAL參數需要好好說說,REPEAT_INTERVAL參數 的語法結構要復雜的多。其中最重要的是FREQ和INTERVAL兩個關鍵字。
◦FREQ 關鍵字用來指定間隔的時間周期,可選參數有:
YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY, SECONDLY,分別表示年、月、周、日、時、 分、 秒等單位。
◦INTERVAL 關鍵字用來指定間隔的頻繁,可指定的值的范圍從1-99。
例如:REPEAT_INTERVAL=>'FREQ=DAILY;INTERVAL=1';表示每天執行一次,如果將INTERVAL改為7就表示 每7天執行一次,效果等同於FREQ=WEEKLY;INTERVAL=1。
一般來說,使用DBMS_SCHEDULER.CREATE_JOB創建一個JOB,至少需要指定上述參數中的前3項。除此之外,還可以在CREATE_JOB時,指定下列參數:
•NUMBER_OF_ARGUMENTS :指定該JOB執行時需要附帶的參數的數量,默認值為0,注意當JOB_TYPE列值為 PLSQL_BLOCK或CHAIN時,本參數必須設置為0,因為上述兩種情況下不支持附帶參數。
•END_DATE :指定任務的過期時間,默認值為NULL。任務過期后,任務的STATE將自動被修改為COMPLETED, ENABLED被置為FALSE。如果該參數設置為空的話,表示該任務永不過期,將一直按照REPEAT_INTERVAL參 數設置的周期重復執行,直到達到設置的MAX_RUNS或MAX_FAILURES值。
•JOB_CLASS :指定任務關聯的CLASS,默認值為DEFAULT_JOB_CLASS。
•ENABLED :指定任務是否啟用,默認值為FALSE。FALSE狀態表示該任務並不會被執行,除非被用戶手動調用, 或者用戶將該任務的狀態修改為TRUE。
•AUTO_DROP :當該標志被置為TRUE時,ORACLE會在滿足條件時自動刪除創建的任務
◦任務已過期;
◦任務最大運行次數已達MAX_RUNS的設置值;
◦任務未指定REPEAT_INTERVAL參數,僅運行一次;
•COMMENTS :設置任務的注釋信息,默認值為NULL。
補充:
REPEAT_INTERVAL:
FREQ:關鍵字用來指定間隔的時間周期,可選參數有:
YEARLY(年), MONTHLY(月), WEEKLY(周), DAILY(日), HOURLY(時), MINUTELY(分), SECONDLY(秒)等單位。
INTERVAL: 關鍵字用來指定間隔的頻繁,可指定的值的范圍從1-999。
BYHOUR 指定一天中的小時。可指定的值的范圍從1-24。16,17,18就表示每天下午的4、5、6點。
BYDAY 關鍵字用來指定每周的哪天運行。
BYMONTHDAY 關鍵字用來指定每月中的哪一天。-1 表示每月最后一天。
BYMONTH 關鍵字用來指定每年的月份。
BYDATE 指定日期。0310就表示3月10日。
