程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> ORACLE提供的重要的包

ORACLE提供的重要的包

編輯:Oracle數據庫基礎

前言

Oracle提供了幾個包,它們可以用來完成很多任務,從內部進程通信到文件I/O,到在PL/SQL塊中動態創建和執行SQL語句。所有這些包由SYS用戶所擁有—當Oracle最初安裝時兩個用戶中的一個,這些包中最重要的包括:

DBMS_Alert 不用輪詢就允許應用命名並發出警告條件信號的過程與函數

DBMS_DDL 允許獲取PL/SQL程序內部一定數量的DDL語句的過程

DBMS_Describe 為存儲過程與函數描述API的過程

DBMS_Job 管理BLOBs、CLOBs、NCLOBs與BFILEs的過程與函數

DBMS_Output 允許PL/SQL程序生成終端輸出的過程與函數

DBMS_Pipe 允許數據庫會話使用管道通信(通信頻道)的過程與函數

DBMS_SQL 在PL/SQL程序內部執行動態SQL的過程與函數

DBMS_Utility

UTL_File 允許PL/SQL程序讀寫服務器文件系統上的文本文件的過程與函數

用DBMS_JOB來實現高級計劃任務

程序有三個參數:需要提交的任務的名字、啟動任務的時間已經執行該任務的間隔時間。

dbms_job.submit(what='statspack_alert.sql;',

next_date=sysdate+1/24,——在下一個小時後啟動

interval='sysdate+1/24');——每小時運行一次

問題是,盡管我們在這個程序中指定了任務起始時間和重新執行的時間間隔,但是我們看不到在預定時間運行該任務的機制。例如,如何讓一個任務在早上8點啟動、每小時 運行一次、最後在下午5點終止呢?

上面的例子讓該任務每小時運行一次,但是為了獲得時間間隔,它有必要創建兩個其它任務:

一個任務在下午5點終止(主)任務,

另一個任務在第二天早上8點啟動(主)任務。

為了實現高級計劃任務,我們可以創建自定義間隔,讓任務在特定的時間間隔來啟動和終止。下面是一個例子:

Schedule a snapshot to be run on this instance every hour
variable jobno number;
   variable instno number;
   begin
   select instance_number into :instno from v$instance;

提交任務從6:00開始,每小時運行一次

dbms_job.submit(
   jobno, 'statspack.snap; ',
   trunc(sysdate)+6/24,
   'trunc(SYSDATE+1/24,''HH'')',
   TRUE,
   instno);

提交任務從9:00開始,12小時後運行 

dbms_job.submit(
jobno,
'statspack.snap;',
trunc(sysdate+1)+9/24,
'trunc(SYSDATE+12/24,''HH'')',
TRUE,
instno);

提交任務從6:00開始,每隔十分鐘運行一次

dbms_job.submit(
jobno,
'statspack.snap;',
trunc(sysdate+1/144,'MI'),
'trunc(sysdate+1/144,''MI'')',
TRUE,
instno);

提交任務從周一到周五早上6:00開始,每小時運行一次

dbms_job.submit(
jobno,
'statspack.snap;',
trunc(sysdate+1)+6/24,
'trunc(
least(
next_day(SYSDATE,''MONDAY''),
next_day(SYSDATE,''TUESDAY''),
next_day(SYSDATE,''WEDNESDAY''),
next_day(SYSDATE,''THURSDAY''),
next_day(SYSDATE,''FRIDAY'')
)
+1/24,''HH'')',
TRUE,
instno);
commit;
end;

DBMS_Job包的用法例子:

1、創建測試表

SQL> create table a(a date);

表已創建。

2、創建一個自定義過程

SQL> create or replace procedure test as
   2 begin
   3 insert into a values(sysdate);
   4 end;
   5 /

過程已創建。

3、創建JOB

SQL> variable job1 number;
   SQL>
   SQL> begin
   2 dbms_job.submit(:job1,'test; ',sysdate,'sysdate+1/1440');
   如果要按照分鐘來執行最好使用
   'sysdate+5/24/60'執行的間隔時間為5分鐘,如果需要10分鐘執行,則將5改成10就可以了。 每天
   1440分鐘,即一分鐘運行test過程一次
   3 COMMIT;
   4 end;
   5 /

PL/SQL過程已成功完成。

4、運行JOB

SQL>begin
2 dbms_job.run(:job1);
3 end;
4 /

PL/SQL過程已成功完成。

SQL> select to_char(a,'yyyy/mm/dd hh24:mi:ss')時間from a;

時間

2001/01/07 23:51:21

2001/01/07 23:52:22

2001/01/07 23:53:24

5、修改下次執行時間(10分鐘後執行)

SQL>begin
   2 dbms_job.next_date (:job1,SYSDATE + 10/(24*60));
   3 end;
   4 /

6、刪除JOB

SQL> begin
   2 dbms_job.remove(:job1);
   3 end;
   4 /

PL/SQL過程已成功完成。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved