【實戰】oracle job + 儲存過程 的使用示例
導讀:
第一部分:下面的步驟完整的演示了job的建立過程:
第二部分:job 的相關知識:
第三部分:實際應用
發現:刪除jobs的時候必須使用該job的owner來做,sys也不能刪別人的job!(先這樣理解,以後再更正。嘿嘿·)
正文:
第一部分:下面的步驟完整的演示了job的建立過程:
1,先建立一張pig表,欄位為a 日期格式
SQL> create table pig(a date);
Table created
SQL> commit;
Commit complete
2,建立一個儲存過程 bb 作用是往pig表中插入資料
SQL> create or replace procedure bb as
2 begin
3 insert into pig values(sysdate);
4 end;
5 /
Procedure created
3,建立一個job,名稱為job2009 ;作用是每分鐘(60×24=1440)執行一次儲存過程bb。
SQL> variable job2009 number;
SQL> begin
2 dbms_job.submit(:job2009,'bb;',sysdate,'sysdate+1/1440');
3 end;
4 /
注意:這裡系統自動生成job id 為41
PL/SQL procedure successfully completed
job2009
---------
41
4,執行job2009
SQL> begin
2 dbms_job.run(:job2009);
3 end;
4 /
PL/SQL procedure successfully completed
job2009
---------
41
5,刪除job2009
SQL> begin
2 dbms_job.remove(:job2009);
3 end;
4 /
6,查詢jobs的相關檢視
select job,last_date,last_sec,broken,failures,interval, what from dba_jobs
詳解 dba_jobs中幾個比較重要的欄位
job: 指的是job的id號。比如上面的 41
failures:job執行的時候失敗次數,如果超過了15次,那麼broken列將被標為Y,以後就不會執行該job了
broken:預設為N,如果為Y,意味著不再執行該job!
interval:執行job的間隔時間。
what:該job的實際工作。
第二部分:job 的相關知識:
1,DBA_JOBS
DBA_JOBS
===========================================
欄位(列) 型別 描述
JOB NUMBER 任務的唯一標示號
LOG_USER VARCHAR2(30) 提交任務的使用者
PRIV_USER VARCHAR2(30) 賦予任務許可權的使用者
SCHEMA_USER VARCHAR2(30) 對任務作語法分析的使用者模式
LAST_DATE DATE 最後一次成功執行任務的時間
LAST_SEC VARCHAR2(8) 如HH24:MM:SS格式的last_date日期的小時,分鐘和秒
THIS_DATE DATE 正在執行任務的開始時間,如果沒有執行任務則為null
THIS_SEC VARCHAR2(8) 如HH24:MM:SS格式的this_date日期的小時,分鐘和秒
NEXT_DATE DATE 下一次定時執行任務的時間
NEXT_SEC VARCHAR2(8) 如HH24:MM:SS格式的next_date日期的小時,分鐘和秒
TOTAL_TIME NUMBER 該任務執行所需要的總時間,單位為秒
BROKEN VARCHAR2(1) 標誌引數,Y標示任務中斷,以後不會執行
INTERVAL VARCHAR2(200) 用於計算下一執行時間的表示式
FAILURES NUMBER 任務執行連續沒有成功的次數
WHAT VARCHAR2(2000) 執行任務的PL/SQL塊
CURRENT_SESSION_LABEL RAW MLSLABEL 該任務的信任Oracle會話符
CLEARANCE_HI RAW MLSLABEL 該任務可信任的Oracle最大間隙
CLEARANCE_LO RAW MLSLABEL 該任務可信任的Oracle最小間隙
NLS_ENV VARCHAR2(2000) 任務執行的NLS會話設定
MISC_ENV RAW(32) 任務執行的其他一些會話引數
--------------------------
2,描述 INTERVAL引數值
每天午夜12點 'TRUNC(SYSDATE + 1)'
每天早上8點30分 'TRUNC(SYSDATE + 1) + (8*60+30)/(24*60)'
每星期二中午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)'
--------------------------
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
第三部分:實際應用
步驟一:建立一個job,每月25日執行下面sql。 SQL> variable job2010 number; SQL> begin SQL> dbms_job.submit(:job2010,'delete from i0216_inv_balance_curstock where trunc(sysdate-mtime) > 90 and ib_qty = 0;commit;',sysdate,'TRUNC(LAST_DAY(SYSDATE ) + 25)'); <==每月25號00:00執行 SQL> end; SQL> / 步驟二:查詢生成的job id SQL> select job, what from dba_jobs; job what 61 .......... 步驟三:執行剛才建立的job SQL> begin SQL> dbms_job.run(61); SQL> end; SQL> / 步驟四:查詢該job下次執行的時間 SQL> select job,next_date,what from dba_jobs SQL> where job=’61’; 步驟五:刪除該job SQL> begin SQL> dbms_job.remove(61); SQL> end; SQL> / 參考文件:
http://blog.oracle.com.cn/index.php/237208/viewspace-28674.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/11320622/viewspace-700096/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORACLE 儲存過程示例Oracle儲存過程
- 實戰儲存過程排程過程儲存過程
- oracle動態sql儲存過程示例OracleSQL儲存過程
- Oracle:建立JOB定時執行儲存過程Oracle儲存過程
- SQL儲存過程示例SQL儲存過程
- job呼叫儲存過程的注意事項儲存過程
- MyBatis 示例之儲存過程MyBatis儲存過程
- oracle的儲存過程Oracle儲存過程
- oracle 儲存過程遊標的使用Oracle儲存過程
- 從sybase的儲存過程轉向oracle的儲存過程儲存過程Oracle
- Oracle儲存過程Oracle儲存過程
- oracle的儲存過程格式Oracle儲存過程
- 使用儲存過程儲存過程
- oracle procedure 儲存過程輸入及輸出in out示例Oracle儲存過程
- Oracle儲存過程乾貨(一):儲存過程基礎Oracle儲存過程
- JDBC 呼叫儲存過程程式碼示例JDBC儲存過程
- Oracle儲存過程-1Oracle儲存過程
- Oracle儲存過程例子Oracle儲存過程
- Oracle建立儲存過程Oracle儲存過程
- oracle plsql儲存過程OracleSQL儲存過程
- Mysql 儲存過程的使用MySql儲存過程
- job中呼叫儲存過程,儲存過程使用AUTHID CURRENT_USER,還出現ORA-01031儲存過程
- Oracle儲存過程優化小實踐Oracle儲存過程優化
- DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC儲存過程Database儲存過程
- 原創:oracle 儲存過程Oracle儲存過程
- oracle 儲存過程批次提交Oracle儲存過程
- oracle 儲存過程學習Oracle儲存過程
- [Flashback]Oracle flashback儲存過程Oracle儲存過程
- Oracle儲存過程學習Oracle儲存過程
- java 呼叫oracle 儲存過程JavaOracle儲存過程
- oracle--08儲存過程Oracle儲存過程
- Oracle中定義package以及儲存過程的使用OraclePackage儲存過程
- oracle儲存過程中的陣列Oracle儲存過程陣列
- 使用JavaScript和Python實現Oracle資料庫的儲存過程?JavaScriptPythonOracle資料庫儲存過程
- ORACLE儲存過程中建立子過程的測試!Oracle儲存過程
- 儲存過程中使用cursor儲存過程
- .NET Core中使用Dapper操作Oracle儲存過程最佳實踐APPOracle儲存過程
- oracle儲存過程書寫格式Oracle儲存過程