1 前言
在库存治理系统中,经常需要涉及查询功能。实现查询功能大致有两种,如下:
第一种是在写入数据表的时候,计算余额,并将余额存入字段中。此方法的优点在于查询速度快,缺点是一旦原始数据需要修改,则余额的同步更新会很复杂,甚至无法实现。
第二种是在数据表的字段中不设立余额字段,在查询过程中实现计算。此方法的缺点是正常情况下速度较慢,优点是数据存取逻辑较简单。
本文主要论述第二种的方法,也就是余额字段的计算。
2 余额实时计算的几种方法
2.1 设立临时表,在查询之前先计算余额
此方法是目前大多数程序员使用的方法,优点是算法简单,缺点是运行效率非常低下,我个人认为不足为取。
2.2 使用Oracle的OVER函数实现
此方法甚至有的OCP仍不懂得,但确实是值得大家研究讨论的解决方案。
OVER函数的简单资料在附件,大家可以参阅.
点击此处下载armok0178880.rar
本文重点描述余额实时计算的第二种方法
3 OVER函数实现余额计算
3.1 实例
CONNECT SCOTT/TIGER@DSV241DW1;
SELECT
DEPTNO
,ENAME ITEMNAME
,TO_CHAR(HIREDATE,'YYYY.MM.DD') TRXDATE
,SAL INF
,COMM OUF
,SUM(SAL-NVL(COMM,0)) OVER ( ORDER BY HIREDATE) ENDINV
FROM EMP
ORDER BY HIREDATE;
3.2 字段
INF表示入库
OUT表示出库
ENVINV表示余额
3.33 OVER使用说明
每条记录都SUM本记录之前(包括本记录)的出库和入库,于是求得本记录为止的余额。