plsql 創建job定時器


1.情景展示

Oracle如何創建定時任務(定時器、調度)?

2.PLSQL

打開plsql,在對象當中找到Jobs,右鍵--》新建;

示例:

這里,需要注意的是:

必須給job class指定值,使用DEFAULT_JOB_CLASS即可,否則無法創建;

應用成功后,在jobs位置,右鍵,刷新,新建的任務才能顯示出來。

2023年3月10日10:10:25

說明:

當要定時調用的是存儲過程,並且存儲過程有入參時,使用定時器調用傳參,僅支持字符串類型進行傳參,如日期類型等不支持。

3.SQL

點擊右下角的“查看SQL”,可以查看到具體的job腳本;

查看代碼
begin
  sys.dbms_scheduler.create_job(job_name            => 'JOB_PKG_TEST',
                                job_type            => 'STORED_PROCEDURE',
                                job_action          => 'PKG_TEST.PRO_MAIN',
                                number_of_arguments => 1,
                                start_date          => to_date('12-03-2022 00:00:00', 'dd-mm-yyyy hh24:mi:ss'),
                                repeat_interval     => 'Freq=Daily;Interval=1',
                                end_date            => to_date(null),
                                job_class           => 'DEFAULT_JOB_CLASS',
                                enabled             => true,
                                auto_drop           => false,
                                comments            => '定時執行計划任務');
  sys.dbms_scheduler.set_job_argument_value(job_name          => 'JOB_PKG_TEST',
                                            argument_position => 1,
                                            argument_value    => 'qq');
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 :指定任務執行的頻率,比如多長時間會被觸發再次執行。本參數也可以為空,如果為空的話,就表示當前設定的任務只執行一次。

其中,最重要的是FREQ和INTERVAL兩個關鍵字。 
     FREQ 關鍵字用來指定間隔的時間周期,可選參數有: 
         YEARLY, MONTHLY, WEEKLY, DAILY, HOURLY, MINUTELY, SECONDLY,分別表示年、月、周、日、時、分、秒等單位。
     INTERVAL 關鍵字用來指定間隔的頻繁,可指定的值的范圍從1-99。
               BYHOUR  指定一天中的小時。可指定的值的范圍從1-24。16,17,18就表示每天下午的4、5、6點。 
               BYDAY 關鍵字用來指定每周的哪天運行。 
               BYMONTHDAY 關鍵字用來指定每月中的哪一天。-1 表示每月最后一天。 
               BYMONTH  關鍵字用來指定每年的月份。 
               BYDATE 指定日期。0310就表示3月10日。
     例如: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

2023年3月10日10:14:23

定時器每執行一次,就會產生一次日志,我們可以在查看日志和運行細節;

找到job,選擇查看;

來到DBMS調度程序窗口。

我們可以查看日志日期和執行狀態。

切換到運行細節,可以查看更多信息。

寫在最后

  哪位大佬如若發現文章存在紕漏之處或需要補充更多內容,歡迎留言!!!

 相關推薦:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM