在oracle中,觸發器是在指定條件成立時,會自動執行定義的語句,寫法為「create [or replace] tigger 觸發器名觸發時間觸發事件on 表名[for each row] begin pl/sql語句end」。
本教學操作環境:Windows10系統、Oracle 11g版、Dell G3電腦。
一、觸發器簡介
觸發器的定義就是說某個條件成立的時候,觸發器裡面所定義的語句就會被自動的執行。
因此觸發器不需要人為的去調用,也不能調用。
然後,觸發器的觸發條件其實在你定義的時候就已經設定好了。
這裡面需要說明一下,觸發器可以分成語句級觸發器和行級觸發器。
詳細的介紹可以參考網路上的資料,簡單的說就是語句級的觸發器可以在某些語句執行前或執行後被觸發。而行級觸發器則是在定義的了觸發的表中的行資料改變時就會被觸發一次。
具體舉例:
1、 在一個表格中定義的語句級的觸發器,當這個表被刪除時,程式就會自動執行觸發器裡面定義的操作程序。這個就是刪除表的操作就是觸發器執行的條件了。
2、 在一個表格中定義了行級的觸發器,那當這個表中一行資料改變的時候,例如刪除了一行記錄,那觸發器也會被自動執行了。
二、觸發器語法
觸發器的語法:
create [or replace] tigger 触发器名 触发时间 触发事件 on 表名 [for each row] begin pl/sql语句 end
其中:
6、啟用複雜的業務邏輯範例1)、下面的觸發器在更新表 tb_emp之前觸發,目的是不允許在周末修改表:
create or replace trigger auth_secure before insert or update or DELETE on tb_emp begin IF(to_char(sysdate,'DY')='星期日') THEN RAISE_APPLICATION_ERROR(-20600,'不能在周末修改表tb_emp'); END IF; END; /
create table tab_user( id number(11) primary key, username varchar(50), password varchar(50) );
create sequence my_seq increment by 1 start with 1 nomaxvalue nocycle cache 20;
CREATE OR REPLACE TRIGGER MY_TGR BEFORE INSERT ON TAB_USER FOR EACH ROW--对表的每一行触发器执行一次 DECLARE NEXT_ID NUMBER; BEGIN SELECT MY_SEQ.NEXTVAL INTO NEXT_ID FROM DUAL; :NEW.ID := NEXT_ID; --:NEW表示新插入的那条记录 END;
insert into tab_user(username,password) values('admin','admin'); insert into tab_user(username,password) values('fgz','fgz'); insert into tab_user(username,password) values('test','test'); COMMIT;
Oracle影片教學》
以上是oracle觸發器的寫法是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!