instead of觸發器介紹
instead of觸發器代替觸發動作,並在處理約束之前激發(對於每個觸發操作,每個表或檢視都只能有乙個instead of觸發器。而乙個表對於每個觸發操作可以有多個after觸發器)
instead of觸發器的建立模板:
create or replace trigger 觸發器名
instead of 觸發事件 on 表名|檢視名
pl/sql 程式體
instead of觸發器的主要優點:
可以使不能更新的檢視支援更新。(疑問:通過以下的實驗結果得出普通檢視不是也可以更新麼?)
以下是關於instead of觸發器的乙個**示例:
/*準備工作
//先建立乙個主表stu2
create table stu2
(name varchar(10) primary key,
phone number(10)
);//再建立乙個從表stu3
create table stu3
(id number(10) primary key,
name2 varchar(10) references stu2(name),
xuehao number(10)
);//向stu2中插入一行資料
insert into stu2
values('佟麗婭',1);
//向stu3中插入一行資料
insert into stu3
values(1.'佟麗婭',1);
//建立乙個檢視
create view weiview
as select stu2.name,stu2.phone,stu3.xuehao,stu3.id from stu2,stu3
where stu2.name=stu3.name2;
*//*接下來是建立乙個instead of觸發器
create or replace trigger myinsteadoftrigger
instead of update on weiview
begin
update stu2 set name=:new.name,phone=:new.phone
where name=:old.name;
update stu3 set name2=:new.name,xuehao=:new.xuehao,id=:new.id
where id=:old.id;
end;
/*/
以上就是乙個簡單的instead of觸發器
它的功能就是:當對檢視weiview做更新操作時,相應的表也將隨之更新。那麼問題來了,如果不建立instead of觸發器,那麼資料庫檢視支援更新操作麼(增刪改)?如果支援更新,那麼檢視更新後,相應的表會更新麼?(接下來就做乙個簡單的實驗來解答:還是沿用上面的兩個表:stu2和stu3,只不過在新建乙個檢視,且這次不再給檢視加任何觸發器,以下是實驗**)
/*問題:oracle資料庫中檢視支援update操作麼(是否檢視僅僅用來檢視?)
//建立乙個檢視weiview1
create
view
weiview1
asselect
stu2.name,stu3.id
from
stu2,stu3
where
stu2.name=stu3.name2;
//嘗試對檢視(兩個表所連線起來的檢視)進行update操作
update
weiview1
setid=2
where
name='迪麗熱巴';
//注:執行結果是表stu3的id被改變,變成了2(我並沒有設定instead
of 觸發
器)!!
!!可見oracle資料庫的檢視支援更行操作,並且與檢視相關聯的(即試圖從那些表中查詢資料)表也將隨之更新。
Oracle資料庫update觸發器
在專案中使用到oracle資料庫的update觸發器,先記錄下來方便以後查閱。預備知識和格式以後再編輯吧,先把內容貼出來。create or replace trigger demo trigger after update on tb goods referencing new as new ol...
Oracle資料庫觸發器例項
需求 在修改表qdyth.jzfpjcxx時,要實時記錄表中的資料變動情況 協商後結果 建立新錶記錄資料變動情況 實現手段 資料庫觸發器 建立或修改觸發器 tr jzfpjcxx 2 create or replace trigger tr jzfpjcxx 2 觸發條件 before delete...
Oracle資料庫 4 觸發器
資料庫觸發器時儲存於資料庫的命令 pl sql 語句塊,當觸發器發生時它們會隱含執行。執行觸發器的活動被稱為觸發觸發器。觸發事件的中類 處理資料庫表的 dml 語句 insert update,delete ddl 語句 如 create alter 系統事件 如資料庫啟動或關閉。使用者事件,如登入...