1. 程式人生 > >Oracle觸發器入門案例

Oracle觸發器入門案例

觸發器

觸發器:類似於AOP(面向切面程式設計)中的攔截器;不能傳遞引數,輸出引數,也不能顯示呼叫,只有滿足觸發器條件時會由Oracle自動呼叫。
觸發器分類:
語句級觸發器;DML操作 insert delete update select
行級觸發器;
系統事件觸發器;資料庫的關閉 啟動
使用者事件觸發器;DDL操作 drop alter create
下邊我們以實際例子為根據來操作觸發器,相信通過這些操作你回對觸發器有一個新的認識。

建立表

建立一個表(或者本來就有表),這是我們可以新增觸發器,目的就是方式對資料庫中的資料造成我們不想讓其發生的(錯誤)變化。例如:週六日不允許插入資料,非工作時間不得對資料庫進行更新。
例如:

create table MYTEST
(id number primary key,
name varchar2(20),
birthday   date,
age    number )
插入資料操作省略。。。。

此時,資料庫中有了許多資料。。
下邊我們開始按照要求來寫觸發器。

要求一

要求增加年齡之後不得小於增加之前
步驟如下:
1.開啟PL/SQL–>檔案—->程式視窗—->Trigger
2.開始書寫觸發器語句


create or replace trigger checkage
  before  update
  on MYTEST   
  for
each row declare -- 如果要宣告本地變數,可以在這裡書寫 begin -- if 增加之後的年齡小於增加之前的年齡 then -- raise_applicatioin_error(-2001,'錯誤資訊') --*/ --下邊的:new 和 :old兩個關鍵字可以根據表中欄位來獲取表中操作前後的實際資料,以此來判斷操作前後資料發生變化的情況。 if:new.age<:old.age then raise_application_error(-20002,'增加之後年齡不能小於增加之前的年齡.增前:'||:old.age||'||增後:'
||:new.age);
end if; end checkage;

通過F8來編譯,如果沒錯那麼則進行監聽資料庫

要求二

要求週五六日不得插入資料,非上班期間也不得修改資料

實施複雜的安全行檢查
禁止在非工作時間對某表進行操作
1.週末 :to_char(sysdae,’day’) in (‘星期六’,’星期日’)
2.上班前,下班後:to_number(to_char(sysdate,’hh24’)) not between 9 and 17

書寫觸發器語句

create or replace  trigger  security 
before   insert     on   MYTEST
BEGIN 
if to_char(sysdate,'day') in ('星期六',‘星期日’,‘星期五’) or  to_number(to_char(sysdate,'hh24')) not between 9 and 17 then 
raise_application_error(20001,'禁止在非工作時間插入新員工');
end if;
end security;

–security是為觸發器起的別名
before insert on MYTEST 意思就是在插入MYTEST表之前進行執行觸發器操作
BEGIN 後邊開始進行書寫觸發器的操作。
raise_application_error(20001,’禁止在非工作時間插入新員工’);這是丟擲一個例外的書寫格式。記住就行
end if; if之後如果後邊沒有沒有內容,切記寫上
end security; 這是最後的結束標記他不是固定的二十根據別名來生成的,然後通過按年F8按鍵進行編譯如果沒有錯誤則說明編譯成功,進入監視資料庫的狀態。

總結

如果你對觸發器不是太瞭解,相信看完之後你會有種驀然回首的感覺。