用语言实现
好处:
1、可以减少对数据库的访问。
2、可移植性好。
坏处:
1、操作起来考虑的东西较多,修改一处就要修改别一处。也就是说是相互关联的。如果少改了某一处,很可能使数据不一致。
用触发器实现
好处:
1、可以使程序员从复杂的相互关联中解放出来,把精力放在复杂的业务上。
坏处:
1、可移植性差。
下面我就用一个例子实现一个简单的出入库。因为是例子表中所用到的字段很少。这里的例子只做为抛砖引玉。
数据表为入库金额表(以下简称入库表)income,出库金额表(以下简称出库表)outlay,余额表balance
代码如下:
income{
idnumber;
pay_amountnumber;(入库金额字段)
}
outlay{
idnumber;
outlay_amountnumber;(出库金额字段)
}
balance
{
idnumber;
balancenumber;(余额字段)
}
下面分别在入库和出库表中建立触发器
入库表(income):
代码如下:
CREATETRIGGER"AA"."TRI_ADD"AFTER
INSERT
ORDELETEON"INCOME"FOREACHROWbegin
ifdeletingthen
updatebalancesetbalance=nvl(balance,0)-:old.pay_amount;
elsifupdatingthen
updatebalancesetbalance=nvl(balance,0)-:old.pay_amount+:new.pay_amount;
else
updatebalancesetbalance=nvl(balance,0)+:new.pay_amount;
endif;
end;
出库表(outlay):
代码如下:
CREATETRIGGER"AA"."TRI_CUT"AFTER
INSERT
ORDELETE
ORUPDATEON"OUTLAY"FOREACHROWbegin
ifdeletingthen
updatebalancesetbalance=nvl(balance,0)+:old.outlay_amount;
elsifupdatingthen
updatebalancesetbalance=nvl(balance,0)+:old.outlay_amount-:new.outlay_amount;
else
updatebalancesetbalance=nvl(balance,0)-:new.outlay_amount;
endif;
end;
下面我解释一下
oracle触发器,触发事件分为插入,删除,更新列三种事件,分别对应inserting/deleting/updating关键字
可以用if语句分别实现
代码如下:
ifinsertingthen
-----
elsifupdatingthen
-----
elsifdeletingthen
------
endif;
NVL(eExpression1,eExpression2)
如果eExpression1的计算结果为null值,则NVL()返回eExpression2。
如果eExpression1的计算结果不是null值,则返回eExpression1。eExpression1和eExpression2可以是任意一种数据类型。
如果eExpression1与eExpression2的结果皆为null值,则NVL()返回.NULL.。
这里插入和删除就不说了。主要是更新操作,更新操作要注意的是更新应该是先减去旧值,在加上新值。
以上就是触发器例子的实现。文章写的不好请大家谅解。
您可能感兴趣的文章:Oracle触发器实例代码Oracle触发器表发生了变化触发器不能读它的解决方法(必看)Oracle使用触发器和mysql中使用触发器的案例比较Oracle触发器用法实例详解Oracle中使用触发器(trigger)和序列(sequence)模拟实现自增列实例oracle监控某表变动触发器例子(监控增,删,改)[Oracle]如何使用触发器实现IP限制用户登录oracle存储过程和触发器复制数据oracle触发器学习笔记详解oracle中通过触发器记录每个语句影响总行数