1. 程式人生 > >oracle資料庫語句級觸發器和行級觸發器的使用

oracle資料庫語句級觸發器和行級觸發器的使用

  1. 行級觸發器對DML語句影響的每個行執行一次,觸發器表(如:您的定義觸發器的emp表)變化一個記錄(I、D、U)就執行一次。
    語句級觸發器對每個DML語句執行一次,完成一次“事務”觸發一次。 如果在TABLE表中插入的資料為500行,那麼這個表上的語句級觸發器只執行一次,而行級的觸發器就要執行500次了。

  2. 語句級別觸發器
    是在表上或者某些情況下的檢視上執行的特定語句或者語句組上的觸發器。能夠與INSERT、UPDATE、DELETE或者組合上進行關聯。 但是無論使用什麼樣的組合,各個語句觸發器都只會針對指定語句啟用一次。比如,無論update多少行,也只會呼叫一次update語句觸發器。
    例子:需要對在表上進行DML操作的使用者進行安全檢查,看是否具有合適的特權。
create trigger tri_study 

  before insert or update or delete on zrp 

begin 

  if user not in (‘DONNY’) then 

  Raise_application_error(-20001, ‘You can not access to modify this table.’); 

  end if; 

end; 

3、 行觸發器

是指為受到影響的各個行啟用的觸發器,定義與語句觸發器類似,有以下兩個例外:

1、 定義語句中包含FOR EACH ROW子句

2、 在BEFORE……FOR EACH ROW觸發器中,使用者可以引用受到影響的行值。

定義:

create trigger tri_study 

  before insert or update 

  of department_id 

  on employees_copy 

  referencing old as old_value 

  new as new_value 

  for each row 
  www.2cto.com  
  when (new_value.department_id<>80 ) 

begin 

  :new_value.commission_pct :=0; 

end;