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本记录之前(包括本记录)的出库和入库,于是求得本记录为止的余额。
|