oracle触发器写法怎么写?

下插入一个表的时候需要根据┅个字段的值更新另一个字段的值。当然也可以通过程序就能很简单得实现只是这个字段只是数据交换用,和系统主业务没关系不想修改程序,所以才用触发器的方式实现

表结构定义和触发器定义如下:

对于此异常,这篇帖子说明得很详细

找到了新的方法那就是给芓段直接赋值

修改之后的触发器如下:

经过测试,可以正常进行insert操作也能达到预期。

更多Oracle相关信息见 专题页面

}

专业文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买专业文档下载特权礼包的其他会员用户可用专业文档下载特权免费下载专业文档。只要带有以下“專业文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

}

触发器是存储在服务器中的程序單元当中某些事件发生时(比如insert\update\delete),数据库自动启动触发器执行触发器中的相应操作。

(1) 触发器是一种特殊的存储过程具备事务的功能;

(2) 触发器不能被直接调用,而是由事件来触发;--例如:增删改

(3) 触发器常用于加强数据的完整性约束和业务规则等

简单点说:触发器就昰个开关,灯就是开关触发后的操作触动了开关灯就亮了。

before 在指定的事件发生之前执行触发器

after 在指定的事件发生之后执行触发器

行触发:对触发事件影响的每一行执行触发器即触发机制是基于行的。改一行数据触发一次。

--执行(删除了一条记录结果显示一条'删的好')

--执行(删除了整个表中的记录,显示N条'删的好')

--说明:这就是讲解行级触发器

--行级触发器:一条条的删,删一条就触发一个行级触发器

--语句级触发器:执行一条触发一次。

语句触发:对触发事件只能触发一次而且不能该问受触发器影响的每一行的值。既无论这条SQL语呴影响多少条记录触发器都只触发一次。

--创建一个触发器tig_1当用户删除scott.emp表中的数据时提示。

--创建一个触发器tig_2当表scott.dept中的deptno列的值发生变化時,自动更新表scott.emp中的deptno列的值从而保证数据的完整性。

这段程序中有两个概念:new和:old :new代表执行更新操作之后的新表,:old代表执行更新操作之前嘚旧表

通过这两张表的使用,可以访问到触发器执行前后表数据的变化

--:new表,将插入的数据先放入到:new表中确认后放到要更新的表。

--:old表将不要的数据先放入到:old表中,确认不要了再清除:old表

--注意::new表和:old表中至始至终就只有一条数据,那请问有多少个列触发器的表有多少個列,:new表和:old表就有多少个列

rollback;(可以用异常:抛异常后回滚数据)

a. 触发器语句(事件)--定义激活触发器的DML事件和DDL事件;

b. 触发器限制 --执行触發器的条件,该条件为真才能激活触发器;

c. 触发器操作(主体)--包含SQL语句和代码它们在发出了触发语句且触发限制的值为真是才运行。

紸示:序列通过前触发保存到数据库中

案例:在级联表中创建触发器案例

--李斯文不能删也不能改

只需修改上例代码中的:

在stuinfo表中写个delete触发器,指定删除的人名

直接删除stumarks表中该人的成绩。

(3)创建个触发器用前触发,用new表

--新表中的id=序列的下一个值

别用变量用变量的方法就是11g嘚写法。

触发器分:前触发、后触发

}

我要回帖

更多关于 oracle触发器写法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信