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按鍵進行編譯如果沒有錯誤則說明編譯成功,進入監視資料庫的狀態。
總結
如果你對觸發器不是太瞭解,相信看完之後你會有種驀然回首的感覺。