建立替代 Instead of 觸發器

2021-07-09 17:04:07 字數 770 閱讀 1643

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...