熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

ORACLE提供的重要的包

2013-11-13 22:22:40  來源: Oracle 

  前言

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

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

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

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

  DBMS_Job 管理BLOBsCLOBsNCLOBs與BFILEs的過程與函數

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

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

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

  DBMS_Utility

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

  用DBMS_JOB來實現高級計劃任務

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

  dbms_jobsubmit(what=statspack_alertsql;

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

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

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

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

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

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

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


      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;


  提交任務從開始每小時運行一次

         dbms_jobsubmit(
  jobno statspacksnap;
  trunc(sysdate)+/
  trunc(SYSDATE+/HH)
  TRUE
  instno);


  提交任務從開始小時後運行 

         dbms_jobsubmit(
  jobno
  statspacksnap;
  trunc(sysdate+)+/
  trunc(SYSDATE+/HH)
  TRUE
  instno);


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

         dbms_jobsubmit(
  jobno
  statspacksnap;
  trunc(sysdate+/MI)
  trunc(sysdate+/MI)
  TRUE
  instno);


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

         dbms_jobsubmit(
  jobno
  statspacksnap;
  trunc(sysdate+)+/
  trunc(
  least(
  next_day(SYSDATEMONDAY)
  next_day(SYSDATETUESDAY)
  next_day(SYSDATEWEDNESDAY)
  next_day(SYSDATETHURSDAY)
  next_day(SYSDATEFRIDAY)
  )
  +/HH)
  TRUE
  instno);
  commit;
  end;

  DBMS_Job包的用法例子

  創建測試表 

         SQL> create table a(a date);

  表已創建

  創建一個自定義過程  

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

  過程已創建

  創建JOB 

         SQL> variable job number;
  SQL>
  SQL> begin
   dbms_jobsubmit(:jobtest;sysdatesysdate+/);
  如果要按照分鐘來執行最好使用
          sysdate+//執行的間隔時間為分鐘如果需要分鐘執行則將改成就可以了 每天
          分鐘即一分鐘運行test過程一次
   COMMIT;
   end;
   /

  PL/SQL過程已成功完成

  運行JOB  

         SQL> begin
   dbms_jobrun(:job);
   end;
   /

  PL/SQL過程已成功完成 

         SQL> select to_char(ayyyy/mm/dd hh:mi:ss)時間from a;

  時間 

  // ::

  // ::

  // ::

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

         SQL>begin
   dbms_jobnext_date (:jobSYSDATE + /(*));
   end;
   /

  刪除JOB 

         SQL> begin
   dbms_jobremove(:job);
   end;
   /

  PL/SQL過程已成功完成


From:http://tw.wingwit.com/Article/program/Oracle/201311/18928.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.