oracle 触发器 实现出入库

来源:asp之家 时间:2009-07-23 14:56:00 

用语言实现
好处:
1、可以减少对数据库的访问。
2、可移植性好。
坏处:
1、操作起来考虑的东西较多,修改一处就要修改别一处。也就是说是相互关联的。如果少改了某一处,很可能使数据不一致。
用触发器实现
好处:
1、可以使程序员从复杂的相互关联中解放出来,把精力放在复杂的业务上。
坏处:
1、可移植性差。
下面我就用一个例子实现一个简单的出入库。因为是例子表中所用到的字段很少。这里的例子只做为抛砖引玉。
数据表为入库金额表(以下简称入库表)income,出库金额表(以下简称出库表)outlay,余额表balance 

代码如下:


income{
id number;
pay_amount number;(入库金额字段)
}
outlay{
id number;
outlay_amount number;(出库金额字段)
}
balance
{
id number;
balance number;(余额字段)
}


下面分别在入库和出库表中建立触发器
入库表(income):

代码如下:


CREATE TRIGGER "AA"."TRI_ADD" AFTER
INSERT
OR DELETE ON "INCOME" FOR EACH ROW begin
if deleting then
update balance set balance = nvl(balance,0) - :old.pay_amount;
elsif updating then
update balance set balance = nvl(balance,0) - :old.pay_amount + :new.pay_amount;
else
update balance set balance = nvl(balance,0) + :new.pay_amount;
end if;
end;


出库表(outlay): 

代码如下:


CREATE TRIGGER "AA"."TRI_CUT" AFTER
INSERT
OR DELETE
OR UPDATE ON "OUTLAY" FOR EACH ROW begin
if deleting then
update balance set balance = nvl(balance,0) + :old.outlay_amount;
elsif updating then
update balance set balance = nvl(balance,0) + :old.outlay_amount - :new.outlay_amount;
else
update balance set balance = nvl(balance,0) - :new.outlay_amount;
end if;
end;


下面我解释一下
oracle触发器,触发事件分为插入,删除,更新列三种事件,分别对应inserting /deleting/updating关键字
可以用if语句分别实现

代码如下:


if inserting then
-----
elsif updating then
-----
elsif deleting then
------
end if;


NVL(eExpression1, eExpression2)
如果 eExpression1 的计算结果为 null 值,则 NVL( ) 返回 eExpression2。
如果 eExpression1 的计算结果不是 null 值,则返回 eExpression1。eExpression1 和 eExpression2 可以是任意一种数据类型。
如果 eExpression1 与 eExpression2 的结果皆为 null 值,则 NVL( ) 返回 .NULL.。
这里插入和删除就不说了。主要是更新操作,更新操作要注意的是更新应该是先减去旧值,在加上新值。
以上就是触发器例子的实现。文章写的不好请大家谅解。

标签:oracle,触发器,出入库
0
投稿

猜你喜欢

  • 在系统崩溃的时候如何恢复原有的数据

    2009-01-08 13:26:00
  • ASP常见错误详解及解决方案小结 推荐第1/2页

    2011-02-24 11:19:00
  • 如何实现对整个站点所有页面的操作?

    2010-05-19 21:20:00
  • VS2008 和.NET 3.5 Beta2常见问题的解决方案

    2007-09-23 12:33:00
  • AJAX初体验之上手篇

    2007-08-23 08:50:00
  • 关于Math.PI、前自增和后自增

    2009-05-25 12:38:00
  • 详细介绍ASP内置对象Response

    2008-06-23 12:42:00
  • ASP中DLL的调试环境配置全攻略

    2007-09-27 13:20:00
  • asp判断ip及ip段范围的一组函数小记

    2008-12-09 18:23:00
  • asp实现新评论自动发短信提示的代码

    2011-03-07 10:38:00
  • SQL学习笔记七函数 数字,日期,类型转换,空值处理,case

    2011-09-30 11:48:25
  • javascript让浏览器实现复读机的功能

    2008-10-10 11:49:00
  • 不成熟的标准化是我们唯一惧怕的

    2008-08-15 18:55:00
  • 怎样处理 MySQL中与文件许可有关的问题

    2008-11-27 16:12:00
  • ASP应用:用stream读文件

    2007-09-24 13:33:00
  • PHP文件上传功能实现逻辑分析

    2023-05-25 02:28:30
  • sql server常用命令行操作(启动、停止、暂停)

    2012-01-05 19:02:48
  • jQuery点击改变链接的文本

    2010-03-19 18:11:00
  • asp内置对象Application详解

    2007-09-19 12:08:00
  • 腾讯网QQ首页诞生的艰辛历程

    2008-11-06 11:05:00
  • asp之家 网络编程 m.aspxhome.com