oracle触发器实现存储
语言中的实现效益:
1,可以减少对数据库的访问。
2。良好的可移植性。
不好的地方:
1,操作要考虑更多的东西,修改一个地方去修改另一个地方,也就是说,它是相互关联的,如果一个地方变化不大,很可能使数据不一致。
用触发器实现
效益:
1,程序员可以从复杂的互连中解放出来,并将精力投入到复杂的业务中。
不好的地方:
1。可怜的可移植性。
我将使用一个示例来实现一个简单的输出库,因为示例表中使用的字段很少,这里的示例只用于投掷砖块和玉石。
数据表为货币收入(以下简称清单)、流出金额(以下简称表)支出、资产负债表余额。
复制代码代码如下所示:
收入{
身份证号码;
pay_amount数;(存储量场)
}
经费{
身份证号码;
outlay_amount数;(outpool量场)
}
平衡
{
身份证号码;
平衡数;(平衡场)
}
以下是在库中和出库表中设置的
仓库表(收入):
复制代码代码如下所示:
创建触发器AA。tri_add 后
插入
或删除每行开始收入
如果删除然后
更新平衡装置平衡= NVL(平衡,0):old.pay_amount;
然后elsif更新
更新平衡装置平衡= NVL(平衡,0):old.pay_amount +:new.pay_amount;
其他的
更新平衡装置平衡= NVL(平衡,0)+:new.pay_amount;
最后如果;
结束;
出表(支出):
复制代码代码如下所示:
创建触发器AA。tri_cut 后
插入
或删除
或更新每行开始支出
如果删除然后
更新平衡装置平衡= NVL(平衡,0)+:old.outlay_amount;
然后elsif更新
更新平衡装置平衡= NVL(平衡,0)+:old.outlay_amount:new.outlay_amount;
其他的
更新平衡装置平衡= NVL(平衡,0):new.outlay_amount;
最后如果;
结束;
让我在这里解释一下。
Oracle触发器、触发器事件分为三类事件:插入、删除、更新列,分别对应于插入/删除/更新关键字。
如果语句可以单独实现
复制代码代码如下所示:
如果是插入
—
然后elsif更新
—
elsif删除然后
。
最后如果;
NVL(eexpression1,eexpression2)
If the result of eExpression1's calculation is null, then NVL () returns to eExpression2.
如果eexpression1的计算结果不是空值,它返回到eexpression1.eexpression1和eexpression2可以是任何类型的数据。
如果eexpression1和eexpression2结果都是空值,那么NVL()返回的空..
这里不需要插入和删除,主要是更新操作,应该指出更新操作应该先从旧值中减去更新,然后添加新值。
以上是触发器实例的实现,如果文章写得不好,请理解。