instead_of 用於對檢視的dml觸發,由於檢視有可能是由多個表進行聯結(join)而成,因而並非是所有的聯結都是可更新的。但可以按照所需的方式執行更新,例如下面情況:
create or replace view emp_view as
select deptno, count(*) total_employeer, sum(sal) total_salary
from emp group by deptno;
在此檢視中直接刪除是非法:
sql>delete from emp_view where deptno=10;
delete from emp_view where deptno=10
error 位於第 1 行:
ora-01732: 此檢視的資料操縱操作非法
但是我們可以建立instead_of觸發器來為 delete 操作執行所需的處理,即刪除emp表中所有基準行:
create or replace trigger emp_view_delete
instead of delete on emp_view for each row
begin
delete from emp where deptno= :old.deptno;
end emp_view_delete;
delete from emp_view where deptno=10;
drop trigger emp_view_delete;
drop view emp_view;
AFTER觸發器與INSTEAD OF觸發器的區別
instead of 觸發器用來代替通常的觸發動作,即當對錶進行insert update 或 delete 操作時,系統不是直接對錶執行這些操作,而是把操作內容交給觸發器,讓觸發器檢查所進行的操作是否正確。如正確才進行相應的操作。因此,instead of 觸發器的動作要早於表的約束處理。inst...
AFTER觸發器與INSTEAD OF觸發器的區別
全文 instead of 觸發器用來代替通常的觸發動作,即當對錶進行insert update 或 delete 操作時,系統不是直接對錶執行這些操作,而是把操作內容交給觸發器,讓觸發器檢查所進行的操作是否正確。如正確才進行相應的操作。因此,instead of 觸發器的動作要早於表的約束處理。i...
instead of 觸發器的用法
instead of 觸發器的主要優點是可以使不能更新的檢視支援更新。基於多個基表的檢視必須使用 instead of 觸發器來支援引用多個表中資料的插入 更新和刪除操作。instead of 觸發器的另乙個優點是使您得以編寫這樣的邏輯 在允許批處理的其他部分成功的同時拒絕批處理中的某些部分。tra...