1. 程式人生 > >oracle檢視更新,替代觸發器(轉)

oracle檢視更新,替代觸發器(轉)

在oracle中通常如果檢視的資料來源來自單表則該檢視可以進行更新。而如果檢視資料來源來自兩個以上表時這個檢視是不可更新的。但有時候為了操作的方便我們更希望能夠對多表檢視也進行更新。

這時候我們可以通過建立更新觸發器來替代該檢視原有更新以達到多表更新的效果

例如:

3.1 建立測試資料表 
--=================================================== 
--建立測試表 
--=================================================== 
Drop Table t1; 
Drop Table t2; 
create table t1 
( t11 numeric(28),t12 varchar2(20)); 
create table t2 
( t11 numeric(28),t22 varchar2(20));

3.2 多表檢視範例 
--=================================================== 
--建立測試檢視 
--=================================================== 
create Or Replace view t as 
   select T1.t11 f1 ,T1.t12 f2 ,T2.t22 f3 
      from T1,T2  
      Where T1.t11=T2.t11;

3.3 多表檢視觸發器範例       
--=================================================== 
--建立檢視的替代觸發器 
--=================================================== 
Create Or Replace Trigger Trg_InsUpdDel_t 
  Instead Of Insert or update or delete 
  on t 
  for each row 
Declare 
begin 
   If Inserting Then 
      Insert Into t1 (t11,t12) Values (:New.f1,:New.f2); 
      Insert Into t2 (t11,t22) Values (:New.f1,:New.f3); 
   elsif Updating Then 
      Update t1 set t11=:New.f1,t12=:New.f2 where t11=:New.f1; 
      Update t2 set t11=:New.f1,t22=:New.f3 where t11=:New.f1; 
   elsif Deleting then 
      Delete from t1 where t11=:Old.f1; 
      Delete from t2 where t11=:Old.f1; 
   End if; 
end; 
如此即實現多表可更新檢視的定義工作 。

但要注意當檢視進行重新編譯的時候這個觸發器會失效需要重建。