資料庫觸發器是乙個與表相關聯的、儲存的pl/sql程式。每當乙個特定的資料操作語句(insert,update,delete)在指定的表上發出時,oracle自動地執行觸發器中定義的語句序列。解釋:
換句話說:觸發器就是在執行某個操作(增刪改)的時候觸發乙個動作(一段程式)。
建立觸發器語法:
create [or replace] trigger 觸發器名
on 表名
[for each row [when(條件) ] ]
plsql 塊
解釋:
示例:每當dept表中新增了一位新部門時,列印」成功插入新部門」
create or replace trigger tri_adddept
after insert
on dept
declare
begin
dbms_output.put_line('插入了新部門');
end ;
--測試哈
select * from dept;
insert into dept values(80,'itcast1','上海');
select * from dept;
目標:演示語句級觸發器和行級觸發器的區別
複製出來一張表depttemp,分別建立語句級和行級觸發器,然後進行批量插入操作測試。
create table depttemp as select * from dept where 1<>1;
select * from depttemp;
兩個觸發器編寫:
–語句級別
create or replace trigger tri_adddepttemp_yuju
after insert on depttemp
declare
begin--plsql語句
dbms_output.put_line('成功插入了乙個部門:語句級觸發器觸發了。。:');
end tri_adddepttemp_yuju;
–行級別:
create or replace trigger tri_adddepttemp_hangji
after insert on depttemp
for each row--行級觸發器
declare
begin--plsql語句
dbms_output.put_line('成功插入了乙個部門:行級觸發器觸發了。。:');
end tri_adddepttemp_hangji;
批量插入資料測試:
–先建立兩種觸發器
–批量插入資料
insert into depttemp select * from dept;
語句級觸發器,對錶的乙個完整操作才會觸發一次。
簡單的說:行級觸發器,是對應行操作的;語句級觸發器,是對應表操作的。
行級別觸發器的偽記錄變數:
:new代表操作之後的資料,只出現在insert/update中,
:old代表操作(cud)之前的那條資料,出現在update/delete,
insert時:new表示新插入的行資料,update時:new表示要替換的新資料,:old表示要被更改的原來資料,delete時:old表示要被刪除的資料。
示例:
--漲工資:漲後的工資不能少於漲前的工資
create or replace trigger tri_checkempsal
before update on emp--更新之前攔截觸發
for each row--行級觸發器
declare
begin
--如果漲後小於漲前,則,終止更新操作
if :new.sal<:old.sal then>
--終止程式繼續執行,也就終止了更新操作了。 -20001-20999隨便寫
--相當於丟擲異常(throw),(使用了oracle內建的乙個函式來丟擲異常)
end if;
end tri_checkempsal;
但是要注意:觸發器會引起鎖,降低效率!使用時要慎重。如無必要,盡量不要使用觸發器。 oracle之觸發器
1 oracle中觸發器是當進行操作時觸發事情,進行處理。例如進行對資料表進行插入 更新和刪除時進行觸發事情處理。定義觸發器的是 create or replace trigger before after insert update delete on 資料庫表名 for each row 這是表...
Oracle之觸發器
資料庫觸發器是乙個與表相關聯的 儲存的pl sql程式。每當乙個特定的資料操作語句 insert,update,delete 在指定表上發出時,oracle自定地執行觸發器中定義的語句序列。簡單的來說就當某個條件成立的時候,觸發器裡面所定義的語句就會被自動的執行,因此觸發器不需要人為的去呼叫,也不能...
oracle13 觸發器 變數
觸發器 觸發器是指隱含的執行的儲存過程。當定義觸發器時,必須要指定觸發的事件和觸發的操作,常用的觸發事件包括insert,update,delete語句,而觸發操作實際就是乙個pl sql塊。可以使用create trigger來建立觸發器。特別說明 我們會在後面詳細為大家介紹觸發器的使用,因為觸發...