1. 程式人生 > >oracle資料庫觸發器,儲存過程,定時器job,package的基本用法總結

oracle資料庫觸發器,儲存過程,定時器job,package的基本用法總結

--定時器job語法引數解析

使用Submit()過程,工作被正常地計劃好。 
這個過程有五個引數:job、what、next_date、interval與no_parse。 

PROCEDURE Submit ( job       OUT binary_ineger, 
What      IN  varchar2, 
next_date IN  date, 
interval  IN  varchar2, 
no_parse  IN  booean:=FALSE) 

job引數是由Submit()過程返回的binary_ineger。這個值用來唯一標識一個工作。 
what引數是將被執行的PL/SQL程式碼塊。 


next_date引數指識何時將執行這個工作。 
interval引數何時這個工作將被重執行。 
no_parse引數指示此工作在提交時或執行時是否應進行語法分析——TRUE 
指示此PL/SQL程式碼在它第一次執行時應進行語法分析, 
而FALSE指示本PL/SQL程式碼應立即進行語法分析。 

--建立定時器job:

1.定時同步資料,可用以兩臺伺服器資料庫資料的同步

declare   

job number;      --系統生成job標示id
begin
sys.dbms_job.submit(job,'thme_to_thme2;',sysdate,'sysdate+1/1440');  

end;

1.查詢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的實際工作。

2. 檢視相關job資訊

相關檢視

dba_jobs

all_jobs

user_jobs

dba_jobs_running 包含正在執行job相關資訊

---儲存過程例子:

1.實現表資料複製

create or replace procedure thme_to_thme2 as--無引數的過程  
   rownums number;--變數定義
  myid   number(8);
  myname varchar(20) :='賦初值';
  tem    varchar(20);
  cursor c1 is --賦值給遊標,is後面是PL/SQL體
    select distinct t.nid, t.sname from T_HBM t;

begin
  rownums := 0;--賦初值
  if c1%isopen = false then
    --開啟遊標
    open c1;
  end if;
  loop
    rownums := rownums + 1;
    fetch c1 --從遊標中獲得值賦值給變數,迴圈,直到結束
      into myid, myname;      
    exit when c1%notfound;
          insert into T_HBM2(ID,Name) values(myid,myname);
    if mod(rownums,2)=0 then 
    commit;
    end if;
  end loop;
end;

--觸發器:

1.實現在刪除一條記錄複製到另外一張表

/*new是新插入的資料,old是原來的資料
insert只會有new,代表著要插入的新記錄
delete只會有old,代表著要刪除的記錄
update由於執行的是先刪除舊的記錄,再插入新的記錄,因此new和old都會有,且含義與上面的相同
*/
create or replace trigger TR_TBM
before delete on T_HBM --在增刪改成之前或之後
  for each row     --對錶的每一行觸發器執行一次。如果沒有這一選項,則只對整個表執行一次。
declare
  counts number; --宣告變數
  newid  number; --宣告變數
begin
  /*
    select count(*)
      into counts --給變數賦值
      from T_HBM t
     where t.nID = :new.nID; --new 表示要插入的資料物件,即T_HBM表中的一條記錄。這個模組只是舉例
    if counts = 0 then
      newid := seq_THBM.Nextval;
    end if;
  */
  insert into T_HBM_DEL (ID, NAME) values (:OLD.nid, :old.sname); --old是執行上面刪除T_HBM中的物件(一條記錄)
end TR_TBM;

1.禁止刪除某張表的資料

CREATE OR REPLACE TRIGGER "TR_HBM_DEL" 
  BEFORE delete ON T_HBM
begin
  Raise_application_error(20001, '禁止該表資料!');  --彈出提示資訊
end;


這是平時工作中的一點小總結比較簡單。類似的很多功能可以通過上面的知識去實現。希望能對大家有點啟發!