一.什麼是觸發器
觸發器是特定事件出現的時候,自動執行的**塊。類似於儲存過程,但是使用者不能直接呼叫他們。
1.觸發器的功能:
二.建立觸發器
1.基本語法結構
create [or replace] trigger [模式.]觸發器名
before| after insert|delete|(update of 列名)
on 表名
[for each row]
when 條件
pl/sql塊
舉例
create trigger student_triger
before insert or delete or update of student_id
on tan.student
for each row
begin
if inserting then
dbms_output.put_line('insert trigger is chufa le .....');
end if;
if updating then
dbms_output.put_line('update trigger is chufa le .....');
end if;
if deleting then
dbms_output.put_line('delete trigger is chufa le .....');
end if;
end;
create trigger student_triger
before insert or delete or update of student_id
on tan.student
for each row
if inserting then
dbms_output.put_line('insert trigger is chufa le .....');
end if;
if updating then
dbms_output.put_line('update trigger is chufa le .....');
end if;
if deleting then
dbms_output.put_line('delete trigger is chufa le .....');
end if;
三.觸發器的分類
1.dml觸發器
dml觸發器是對錶進行insert,update,delete操作時激發的,上面的例子就是典型的dml觸發器
2.instead of觸發器
在簡單檢視上往往可以執行insert、update和delete操作,但是在複雜檢視上執行insert、 update和delete操作是有限的。如果檢視子查詢包含有集合操作符、分組函式、distinct關鍵字或者連線查詢,那麼將禁止在該檢視上執行 dml操作。為了在這些複雜檢視上執行操作,需要建立instead-of觸發器。
instead of 觸發器的限制:
create or replace trigger tr_instead_of_stu_view
instead of insert on stu_view
for each row
begin
// sql 複雜的邏輯操作
end;
3.系統事件觸發器
oracle的系統事件觸發器:系統事件觸發器是指基於oracle系統事件(如logon和startup)所建立的觸發器。通過這種觸發器可以跟蹤系統或資料庫的變化。
首先建立log表
createtable triger_log_table(
username varchar2(20),
log_time date,
onoff varchar(6),
address varchar2(30));
其次建立觸發器
createtrigger tr_logon
after logon ondatabase
begin
insertinto triger_log_table values (ora_login_user,sysdate,'logon',ora_client_i p_address);
end;
//當使用者登入資料庫後時,將有關資訊寫入建立的log表中
createtrigger tr_logoff
before logoff ondatabase
begin
insertinto triger_log_table values(ora_login_user,sysdate,'logoff',ora_client_ ip_address);
end;
//當使用者退出資料庫時,將有關資訊寫入建立的log表中
Oracle建立觸發器
首先要講一下觸發器的概念 觸發器是由於dml語句的執行引發的一種特殊的資料庫物件。所以呢他的型別就要insert,instead of update,delete 三種觸發器。基本用法如下面所示 建立刪除觸發器 create or replace trigger tri delete after d...
oracle建立觸發器
工作需要,需要建立乙個觸發器,判斷表中的id是否為空,如果為空的時候需要用觸發器加上id,如果沒有觸發觸發器加上id,如果有則不觸發觸發器。建立乙個序列,每次加乙個 create sequence 序列名稱 increment by 1 每次加乙個 建立乙個觸發器 create or replace...
建立oracle觸發器
create trigger 觸發器名稱 before after 執行前觸發還是執行後觸發 insert update delete on 表名 for each row begin 觸發的sql語句 如果只有一條sql語句,可省略begin,end end 觸發器中可能會用到兩種值,一種是修改之...