oracle数据库触发器

来源:互联网 发布:菜鸟网络是什么 编辑:程序博客网 时间:2024/06/04 22:09

instead of触发器

instead of触发器介绍
instead of触发器代替触发动作,并在处理约束之前激发(对于每个触发操作,每个表或视图都只能有一个instead of触发器。而一个表对于每个触发操作可以有多个after触发器)
instead of触发器的创建模板:
create or replace trigger 触发器名
instead of 触发事件 on 表名|视图名
pl/sql 程序体
instead of触发器的主要优点:
可以使不能更新的视图支持更新。(疑问:通过以下的实验结果得出普通视图不是也可以更新么?)
以下是关于instead of触发器的一个代码示例:

/*准备工作//先创建一个主表stu2create table stu2(name varchar(10) primary key,phone number(10));//再创建一个从表stu3create table stu3(id number(10) primary key,name2 varchar(10) references stu2(name),xuehao number(10));//向stu2中插入一行数据insert into stu2values('佟丽娅',1);//向stu3中插入一行数据insert into stu3values(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 myinsteadoftriggerinstead of update on weiviewbeginupdate stu2 set name=:new.name,phone=:new.phonewhere name=:old.name;update  stu3 set name2=:new.name,xuehao=:new.xuehao,id=:new.idwhere id=:old.id;end;/*/

以上就是一个简单的instead of触发器
它的功能就是:当对视图weiview做更新操作时,相应的表也将随之更新。那么问题来了,如果不创建instead of触发器,那么数据库视图支持更新操作么(增删改)?如果支持更新,那么视图更新后,相应的表会更新么?(接下来就做一个简单的实验来解答:还是沿用上面的两个表:stu2和stu3,只不过在新建一个视图,且这次不再给视图加任何触发器,以下是实验代码)

/*问题:oracle数据库中视图支持update操作么(是否视图仅仅用来查看?)//创建一个视图weiview1 create view weiview1 as select stu2.name,stu3.id from stu2,stu3 where stu2.name=stu3.name2;//尝试对视图(两个表所连接起来的视图)进行update操作update weiview1 set id=2where name='迪丽热巴';//注:执行结果是表stu3id被改变,变成了2(我并没有设置instead of 触发器)!!!!可见oracle数据库的视图支持更行操作,并且与视图相关联的(即试图从那些表中查找数据)表也将随之更新。
原创粉丝点击