oracle資料庫語句級觸發器和行級觸發器的使用
阿新 • • 發佈:2019-02-01
- 行級觸發器對DML語句影響的每個行執行一次,觸發器表(如:您的定義觸發器的emp表)變化一個記錄(I、D、U)就執行一次。
語句級觸發器對每個DML語句執行一次,完成一次“事務”觸發一次。 如果在TABLE表中插入的資料為500行,那麼這個表上的語句級觸發器只執行一次,而行級的觸發器就要執行500次了。 -
語句級別觸發器
是在表上或者某些情況下的檢視上執行的特定語句或者語句組上的觸發器。能夠與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;