Oracle 觸發器的使用

來源:互聯網
上載者:User

標籤:error   ptr   div   星期六   temp   src   var   create   檢查   

一.觸發器的作用

  觸發器的作用類似攔截器.把一些針對資料庫的DML操作(insert/update/delete/select)進行攔截,符合業務要求的進行操作,不符合要求的操作可以通過拋出異常來阻止

  說白了就是資料確認(after)與安全性檢查(before),此外觸發器不針對select操作

二.觸發器的使用

  文法不再贅述,百度或者查閱oracle的文檔都能找到

  以下的一些例子是基於scott使用者下的emp表

1.建立語句級觸發器insertEmpTrigger,當對錶【emp】進行增加【insert】操作前【before】,顯示‘插入了一條資料‘

  注意是單引號

 1 --建立觸發器 2 create or replace trigger insert_trigger 3 before 4 insert 5 on emp 6 for each row 7 begin 8         dbms_output.put_line(‘插入了一條資料‘); 9 end;10 /

如果不加for each row即使一次插入多條資料,觸發器仍然只工作一次(普通的語句觸發器),for each row 使得這個觸發器變成了一個行觸發器

 

2.星期一到星期五,且9-21點能向資料庫emp表插入資料,否則使用函數拋出異常,使用:raise_application_error(‘-20000‘,‘例外原因‘)

說明:raise_application_error(error_number,error_message) 用於拋出自訂的異常 error_number為-20000 到 -20999 之間,error_message表示錯誤的資訊

 注意:不能僅僅用整點來控制,必須要考慮分鐘的問題

 1 create or replace trigger security_trigger 2 before 3 insert 4 on emp 5 for each row 6 declare 7         pday varchar2(10); 8         phour number(2); 9 begin10         select to_char(sysdate,‘day‘)  into pday  from dual; 11         select ceil(to_char(sysdate,‘hh24.mi‘))   into phour  from dual;12         if pday in (‘星期六‘,‘星期日‘) or phour not between 9 and 21  then13                 raise_application_error(‘-20000‘,‘非工作日不能插入資料‘);14         end if;15 end;16 /

 觸發器建立之後,在周一的 21:57時已經不能插入資料

 

3.建立行級觸發器checkSalaryTrigger,漲後工資這一列,確保大於漲前工資(10%) (:new.sal/:old.sal的使用)

  :new.列名 與:old.列名 分別表示 某列的新值與舊值,而且這兩個變數只有在建立觸發器時加上for each row才會出現

 此外update二者皆有,insert只有:new,delete只有:old(上面已經說過,觸發器不針對select操作)

 1 create or replace trigger checkSalary_trigger 2 after 3 update 4 on emp 5 for each row 6 begin 7         -- 偽變數:new.sal表示更新後的sal欄位 8         -- 10% 要寫成 0.1 9         if (:new.sal - :old.sal) < :old.sal*0.1 then10             raise_application_error(‘-20000‘,‘工資漲幅必須大於10%‘);11         else 12             dbms_output.put_line(‘更新成功!‘);13         end if;14 end;15 /

 

 

Oracle 觸發器的使用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.