oracle触发器入库,oracle 触发器 实现出入库

用语言实现

好处:

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中通过触发器记录每个语句影响总行数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值